ruby

安全なウェブサイトの作り方~失敗例~

安全なウェブサイトの作り方を読んだので、理解した内容を自分なりにまとめておきます。資料 上記は3章構成になっていてそれぞれ長めの内容なので、ここでは3章の『失敗例』について、Ruby on Rails ではどうするかについてをまとめます。 SQL インジェクシ…

Rubyで学ぶデザインパターン

Factory メソッド Abstract Factory メソッド ビルダ(Builder) パターン シングルトンパターン アダプタ コンポジットパターン デコレータ プロキシ コマンド インタプリタ イテレータ オブザーバ ストラテジパターン テンプレートメソッド 参考 Factory …

Ruby on Rails:Rails の i18n

RailsのI18nとは Ruby on Rails におけるI18n 国際化とローカライズ Active Recordモデルの翻訳を使う 式展開で渡す 参考 RailsのI18nとは I18n は internationalization の略で、国際化・多言語化を意味する。 一般に、アプリケーションの国際化では、『国…

githubでcommit間差分用URLを作る

課題修正時に、commitを複数回やってレビューしてもらう場合、みてもらった時からの差分の見せ方がなんとかならないかなーと思っていたのだけど、やはりありました。 例えば下記のようなcommitAをレビューしてもらい、いくつか修正を行いcommitEで再度レビュ…

アーリーリターン

リーダブルコードに書かれているが、アーリーリターンの美味しさは下記。 メソッドの途中でリターンすることで読むコード数を減らせる 7.5節 関数から早く返す ネストを浅くできる 7.7節 ネストを浅くする 指摘を受けた部分は下記のところ。 def run_wc(file…

zipメソッドで配列を転置する

配列を転置するためには、一度対象を行列にした上でtransposeなどをしてあげれば転置できる。 ただ、配列は行列の要素を満たしていないこともあるので、足りない部分にnilを入れる必要がある。これが地味にめんどくさい。 そこで登場するのが、zipメソッド。…

ファイルタイプ

ls -lで表示されるタイムスタンプについて、『具体的に何の時間?』という部分が曖昧だったのでまとめておく。 man lsを叩くと下記の説明を確認できた。タイムスタンプは『modified(変更された)』時間とのことだった。 The Long Format If the -l option is …

ハッシュと配列でcase-whenっぽく書く

ファイルタイプの分類をとりあえず3パターン以上ならcase文しか思い浮かばず、下記のように記述していた。ただ、見た目はわかりやすいけど、冗長でなんだんかなーと思っていた。 # case-when def replace_file_type(file_name) p File.ftype(file_name) case…

チェリー本:パターンマッチ

パターンマッチの基本 パターンマッチの利用パターン valueパターン variableパターン arrayパターン hashパターン asパターン alternativeパターン findパターン パターンマッチの基本 rubyのパターンマッチの大きな特徴は下記の3つ。 配列やハッシュの構…

チェリー本:例外処理の概要

例外処理の書き方 意図的に例外を発生させる方法 例外処理のベストプラクティス 例外処理の書き方 begin # 例外が起きうる処理 rescue # 例外が発生した場合の処理 retry # 処理をやり直す場合に記述する。 # begin説の頭からリトライする。通常リトライ回数…

チェリー本:モジュールの理解

モジュールとクラスの違い モジュールの使いどころ モジュールの定義 モジュールを利用したメソッド定義(include,extend) 名前空間の作成 関数や定数を提供するモジュール 状態を保持するモジュール モジュールとクラスの違い モジュールからインスタンス…

チェリー本:色々な変数

ここまでにローカル変数やインスタンス変数などには触れてきたが、Rubyには色んな種類の変数がある。紹介されていた変数を下記にまとめる。 変数名 定義方法 ポイント グローバル変数 $付き変数 プログラムのどこからでも参照、代入可能正規表現で用いる$1な…

チェリー本:メソッドの可視性

他の言語とかでも可視性の話はあるけれど、Rubyでの特徴は下記ということらしい。 publicの場合は当該インスタンスのものは、どこからでも呼び出しできる。public以外のものは、クラス内もしくはサブクラス内からしか呼出できない。 protectedとprivateの違…

チェリー本:インスタンスメソッドとクラスメソッド

クラス内で特に意識せずにメソッドを定義すると、それはインスタンスメソッドになる。インスタンスメソッドは各インスタンスに含まれるデータを読み書きするような場合に定義する。 一方、クラスに関係は深いが、各インスタンスのデータを使わないメソッドを…

チェリー本:アクセスメソッドの省略

インスタンス変数を読み出したり書き込んだりするメソッドを暗黙的に定義してくれる方法がRubyでは用意されている。下記のようにattr_accessorメソッド、attr_readerメソッド、attr_writerメソッドを用いる。 下記のように各アクセスレベルに応じて、アクセ…

後置ifの使いどころ

単純に見栄えくらいしか変わらんと思っていた後置ifと後置unlessは、ちゃんと使いどころがある。 下のコードの場合、Xであるか、そうでないかの2パターンしか存在しない。そうした場合、その条件を網羅していることを視覚的に伝えるためには、三項演算子とif…

チェリー本:組み込みライブラリと標準ライブラリとgemの違い

いずれもプログラムでライブラリとして利用できるものだけど、使うまでの準備が少し違うというイメージ。 まず、包含で示すと下記のようになる。 また、ライブラリ読み込み、事前インストールの観点では、それぞれ下記のような違いがある。 項目 ライブラリ…

チェリー本:requireでは相対パスでライブラリを指定しない

requireとrequire_relativeで自作のプログラムをライブラリとして読み込ませる際に、相対パスで指定できるが、requireの方は相対パスでの指定は推奨されない。今回はその理由についてまとめる。 項目 相対パスの起点 機能 require カレントディレクトリ カレ…

読みやすいコードを書くコツ

リーダブルコードを読んだので、大事だなと思ったことをまとめる。 第一部:表面上の改善 第二章:名前に情報を詰め込む 第三章 誤解されない名前 第四章 美しさ 第五章 コメントすべきことを知る 第六章 コメントは正確で簡潔に 第二部:ループとロジックの…