単一障害点(SPOF)について

【結論】 ・単一障害点(Single Point of Failure)とは、システムを構成する要素のうち、停止するとシステム全体が停止してしまう部分のこと ・障害に強いシステムを設計する際、個々の構成要素を複数用意して冗長性を持たせる手法が一般的 ・しかし技術的…

「change_table」で「bulk: true」を使用したマイグレーションの高速化(Rails)

【結論】 ・Rails のマイグレーションで使用されるchange_tableメソッドには、bulk: trueのオプションを設定できる ・このオプションにより、ALTER TABLEクエリにまとめてくれる ・このオプションは MySQLとPostgreSQLのみサポートされていている 【目次】 c…

マイグレーション作成時にchangeメソッドではなくup/downメソッドを使う場面(Rails)

【結論】 ・マイグレーションを作成する場合、up/downメソッドを利用する方法と、changeメソッドを利用する方法が存在する ・up/downメソッドはマイグレーション時とロールバック時の両方の処理内容を定義する必要があるのに対して、changeメソッドはマイグ…

現在日時をズラしたテストが実行できる「TimeHelpers(travel・travel_back・travel_to)」(Rails)

【結論】 ・ActiveSupportのTimeHelpersでは、時間経過によって動作が変化する機能のテストを行う為のヘルパーメソッドが提供される ・travelメソッドは、現在の日時を指定された日時の分だけ未来または過去の日時に変更する ・travel_toメソッドは、直接指…

URLエンコードによってパラメータの空白スペースが+に書き換わる問題(Rails)

【結論】 ・URLパラメータ(クエリ文字列)とは、URLの末尾に?を付け続けて&キー=値と記述することで、サーバーに情報を送るためにURLに付け加える変数 ・application/x-www-form-urlencodedのURLエンコードとは、URLにおいて使用できない文字を使う際に…

カラムのNOT NULL制約(null: false)を途中で設定or削除する方法(Rails)

【結論】 ・カラムのNOT NULL制約を途中で設定or削除するには、change_column_nullメソッドを利用してマイグレーションを行う ・change_column_null(table_name, column_name, null, default = nil) ・第3引数のnullフラグに、trueを指定すればNOT NULL制約…

【AtCoder:16回目】第一回日本最強プログラマー学生選手権-予選-の振り返り(Ruby)

【目次】 振り返り A - Takahashi Calendar 10 B - Kleene Inversion 《今日の学習進捗(3年以内に10000時間に向けて)》 【本題】 振り返り 今回は 8/24(土)に開催された第一回日本最強プログラマー学生選手権-予選-の振り返りを行います。 Japanese Studen…

テスト環境でcsrf_token(csrf_meta_tags)が出力されない問題への対処法(RSpec)

【結論】 ・RailsにはCSRF保護の仕組みがデフォルトで備わっている ・しかし、CSRF保護はテスト環境ではオフになっており、csrf_tokenがHTMLに埋め込まれない為、それが原因でテストが通らない場合がある ・その場合は、CSRF保護をテスト環境でも有効にする…

RailsのCSRF保護について

【結論】 ・CSRFとは、WEBアプリケーションの投稿機能などを利用して悪意のあるコードを仕込むことで、認証済みのユーザーに意図しないコマンドを実行させる攻撃手法 ・対策は、GETとPOSTを適切に使い分け(RESTful)、GET以外のリクエストにセキュリティト…

RSpecでファイルのダウンロードをテストする方法

【結論】 ・リンクをクリックしてCSVファイルをダウンロードする機能の場合、response_headersでレスポンスヘッダの情報を見てテストが出来る ・response_headersはrack_testでは利用できるが、他のドライバ(headless chromeなど)ではresponse_headersが使…

メモリについて

【結論】 ・メモリとは、プログラムやデータを記録する装置(主記憶装置) ・読み書き可能で電源を切るとデータが消えるRAMと、基本的に読み込みのみ可能で電源を切ってもデータが消えないROMと分類される ・RAMには安価で大容量のDRAMと高速なSRAM、ROMには…

ヘッドレスドライバを使わないとCIだけJavaScriptのテストが通らない(RSpec)

【結論】 ・JavaScriptの操作を伴うテストを実行する場合、ブラウザシュミレータ(ドライバ)を使う必要がある ・デフォルトのドライバではテスト実行中にブラウザのウィンドウが開くが、これはCircleCIなどの継続的インテグレーション環境では実行できない …

【AtCoder:15回目】AtCoder Beginner Contest 138の振り返り(Ruby)

【目次】 振り返り A - Red or Not B - Resistors in Parallel C - Alchemist D - Ki 《今日の学習進捗(3年以内に10000時間に向けて)》 【本題】 振り返り 今回は 8/18(日)に開催されたAtCoder Beginner Contest 138の振り返りを行います。 AtCoder Beginn…

AtCoder Grand Contest 036と037のA問題を解く

【目次】 AtCoder Grand Contest 036 A - Triangle AtCoder Grand Contest 037 A - Dividing a String 《今日の学習進捗(3年以内に10000時間に向けて)》 【本題】 AtCoder Grand Contest 036 A - Triangle 問題文 整数 S が与えられます。 以下の条件をす…

Capybaraでiframe内の要素を取得/操作する方法(Rails)

【結論】 ・iframeタグ配下の要素は、そのままでは直接操作することが出来ない ・iframe内の要素を取得/操作するにはwithin_frameで、iframeを明示的に呼び出す必要がある ・within_frameのブロック内であれば、通常のCapybaraの処理でiframe内の要素を取得/…

CKEditorのダイアログ中のテキストをJSで置換する方法(試行錯誤の記録)

【結論】 ・CKEditorのダイアログ中のテキストは、idが固定では無く、classは別のダイアログと共通化されているので、それらを使って文字の置換が困難 ・ダイアログ(JavaScript)の生成にフックするdialogDefinition イベントにコールバックを設定し動的に…

「A server is already running...Check...server.pid.」「Address already in use」でRailsのサーバーが起動できなかった時の対処法

【結論】 ・Railsのサーバーが正常終了しなかった場合、エラーで以降サーバーが正常に起動しなくなる場合がある ・A server is already running...Check.../tmp/pids/server.pid.が表示された場合、ターミナルを再起動するか、server.pidを削除する ・Addres…

機械語のアドレス指定方式

【結論】 ・コンピュータに指示を伝える為には、コンピュータの理解できる0と1で構成された「機械語(命令語)」で伝える必要がある ・命令語は、命令の内容にあたる「命令部」と、処理対象のデータの場所を示す「オペランド部」で構成されている ・オペラ…

コンピュータの五大装置について

【結論】 ・コンピュータの五大装置についてとは、「入力・制御・演算・記憶・出力」というコンピュータの主要な機能を総称した呼び方 ・制御装置が全体を指揮し、それぞれの装置が適切なタイミングで動作する様に運用している ・コンピュータに入力された情…

2038年問題とは

【結論】 ・「2038年問題」とは、2038年1月19日3時14分7秒(UTC)を過ぎると、コンピュータが誤作動する可能性があるとされている問題 ・コンピュータの時刻表現で広く使用されている「UNIX時間」は、1970年1月1日0時0分0秒からの経過秒数で時間を計測してい…

【AtCoder:14回目】AtCoder Beginner Contest 137の振り返り(Ruby)

【目次】 振り返り A - +-x B - One Clue C - Green Bin 《今日の学習進捗(3年以内に10000時間に向けて)》 【本題】 振り返り 今回は 8/10(土)に開催されたAtCoder Beginner Contest 137の振り返りを行います。 AtCoder Beginner Contest 137 - AtCoder 今…

Procオブジェクトについて

【結論】 ・Procオブジェクトとは、ブロックをオブジェクト化したもの ・オブジェクト化することで、変数に代入してメソッドに引数として渡すなど、自由に扱うことが出来る ・ Proc.new、proc、lambda、->と複数の生成方法が存在する 【目次】 Procオブジェ…

関連付け先のモデルのバリデーションを実行する「validates_associated」(Rails)

【結論】 ・validates_associatedは、関連付けられていている他のモデルのバリデーションを実行することができるヘルパー ・オブジェクトを保存しようとすると、関連付けられているオブジェクトごとにvalid?が呼び出される ・validates_associatedを、関連付…

排他制御について(楽観的ロック・悲観的ロック )

【結論】 ・排他制御とは、データの更新を行う際に、競合を防ぐため、更新が完了するまで他ユーザーのデータ取得/更新を制限する仕組み ・楽観的ロックとは、競合が稀にしか起こらないことを前提とした排他制御。データの取得時には何もせず、更新時に競合を…

Railsのモデルのインスタンスは、カラム名の後に「?」を付けると値の有無を判定できる

【結論】 ・Railsでは、blank?やpresent?で、オブジェクトの有無を判定することができる。 ・モデルのインスタンスの場合、カラム名の後に?を加えることで、属性(attribute)に値が入っているか判定することが出来る ・後者の方が、コードがシンプルになる…

非機能要件とは

【結論】 ・非機能要件とは、拡張性やテストのしやすさなど、ユーザーに直接役立つ機能とは別の要件 ・非機能要件の観点には、「変更容易性」「相互運用性」「効率性」「信頼性」「テスト容易性」「再利用性」が挙げられる ・非機能要件が十分に考慮されてい…

【AtCoder:13回目】AtCoder Beginner Contest 136の振り返り(Ruby)

【目次】 振り返り A - Transfer B - Uneven Numbers C - Build Stairs 《今日の学習進捗(3年以内に10000時間に向けて)》 【本題】 振り返り 今回は 8/4(日)に開催されたAtCoder Beginner Contest 136の振り返りを行います。 AtCoder Beginner Contest 136…

7つの設計原理(コードレビューの観点)

【結論】 ・7つの設計原理とは、障害に強いソフトウェアが備えているコードの構造 ・「単純原理」「同型原理」「対照原理」「階層原理」「透明原理」「明証原理」「安全原理」の7つで構成されている ・コードレビューにおいて、メンバーや状況によってチェ…

target="_new"だと一回しか別タブで開かない問題(target="_blank"を使おう)

【結論】 ・HTMLのリンクに対して、target="_new"を設定した場合、リンクを別タブで開いてくれる ・但し開いた別タブ内で、再度target="_new"を設定しているリンクは別タブで開かない ・何度も別タブで開く様にするには、target="_blank"を設定する 【目次】…

コードの臭いとは

【結論】 ・コードの臭いとは、コードの不吉な兆候として表れるサインを示したものです ・可読性や拡張性を高める為のリファクタリングを行う際に、コードの臭いを嗅ぎ分ける能力が重要になる ・コードの臭いに鋭くなるには、プログラミングの原則を理解し、…