この記事は新米エンジニアの著者の個人開発の経験を元に実践しているプロジェクトの始め方です。追加ですべき作業や、改善すべき箇所などありましたらコメント頂けれると有り難いです。
はじめに
Railsのプロジェクトは$ rails init
で、プロジェクトのディレクトリが作成され、ディレクトリ構成について考えずMVCモデルに従って実装を始められます。また、Gemを追加する場合もGemfileに記述することで、Gemを使って実装できるようになります。
この記事は、Ruby単体のプロジェクトを始める際の$ rails init
の代わりになる手引き書になれば、と考え作成しております。
※ ここでいうプロジェクトとは、業務レベルの大規模なものは想定しておらず、個人で開発する小規模なプログラムを想定しています。「1つの.rb
ファイルにまとめるには少し大きいけど、複数ファイルに分けるにはディレクトリ構成に悩む」、「グローバル環境を汚したくないからBundlerでGemを管理したい」、「rbenv globalが古いバージョンになっているが、趣味のプロジェクトぐらい最新のRubyを使いたい」のような実装前にもやもやと悩んでしまうことを回避するための記事です。
0. ディレクトリ作成
$ mkdir {project_name}
$ cd {project_name}
始めにプロジェクトのディレクトリを作成します。これはプロジェクト名と揃えると良いでしょう。
1. Rubyのバージョン指定
$ rbenv local 3.2.2
筆者がRubyバージョン指定にrbenvを使っているためRbenvでの例を記載します。
始めにで上げた「rbenv globalが古いバージョンになっているが、趣味のプロジェクトぐらい最新のRubyを使いたい」という思考を実現するための設定です。
しかし、globalとバージョンを分けるという視点以外にも、数年後にプロジェクトのコードを見返したときにどのバージョンのRubyで実行すべきかという手掛りにもなると考えています。そのためglobalと同じバージョンをプロジェクトで使う場合もlocalでバージョン指定することは利点があると考えています。
2. Bundlerの導入
$ bundle init
$ bundle install
必要に応じてdotenvやActiveSupportなど有用なGemlをGemfileに追加し、Ruby単体よりも効率的に作業を進めることができます。
プロジェクトの性質ごとに必要なGemは異なるため、本記事では詳細な説明は省略します
3. デイレクトリを構成する
$ mkdir lib
$ echo "def method \n puts 'Hello World!'\nend" > lib/sub_script.rb
$ echo "require './lib/sub_script'" > main_script.rb
$ echo "method" >> main_script.rb
$ ruby main_script.rb
---> Hello World!
上のスクリプトは、小規模なプロジェクト向けにメインの処理を書くためのmain_scirpt.rb
と、/lib
配下に切り出した処理を書く構成です。オブジェクト指向でコーディングするなら/lib
配下には各オブジェクトのクラスを定義したファイルが並ぶ想定です。上記の例では、クラス定義ではなくメソッド定義を切り出したパターンです。
main_script.rb
以外を/lib
に定義することで、プロジェクトのデイレクトリ直下にファイルが溢れることを防止しています。プロジェクトのデイレクトリ直下にはGemの設定ファイルを置くことが多いためです。(RubocopやRspec、Dotenvなど)
4. 実装開始!!
おわりに
個人での開発を想定したプロジェクトの始め方ですが、本記事の手法でプロジェクトを始めると、RubyとGemのバージョン情報がプロジェクト内に記録されるためGitを導入することで、用意にコードを実行する環境を他の人に展開することも可能です。