32
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Gemファイルコーディングのベストプラクティス(和訳)

Last updated at Posted at 2015-08-16

社内のコードや先輩の作ったアプリケーションのコードリーディングをしていると、「うお〜きゃっくいいな〜」となることは多々あるかと思います。

先日も同じような体験がGemfileを覗いたときにありました。

ん?Gemfileってなんかベストプラクティスとかあんのか? と思ったのですが、Qittaにそれらしきものは無い・・・仕方ないんで英語の勉強も兼ねてこれを読みました

せっかくなんで英語読めないor読む気無いor自分より開発経験が浅い人向けに和訳を書きおこしました。
でも自分も大した英語力ないですし、意訳入りまくりなので(本当に。特に最後)、英語が出来る方、修正点の指摘お願い致します・・・

GemファイルのベストプラクティスとDiscourse

=>
今週末私は新しいプロジェクト「Discourse」で、ボーイスカウティング(※恐らくリファクタリングの意)を行いました。ボーイスカウトの規約では「あなたは訪れたときより、綺麗な状態でキャンプ場を去らなければならない」というものがあります。

「Discourse」はRailsのプロジェクトなので、ちょっとばかし大きなGemfileが存在します。

私は特に関わっていない初見のプロジェクトのコードを読む際、まず始めにGemfileを確認します。
どのような構成になっているかが大まかにチェックできますし、別プロジェクトをフォークしたものをカスタムしているかや、プライベートライブラリを使っているかもチェックできるからです。

13の誓約(※この名前は筆者の創作)

長年かけて私はGemfileに関するベストプラクティスを組織やチームで設定してきました。
これにより、新しいディベロッパーがチームに参加した時や、あなたのGemfileの秩序を守る時が楽になると思います。

以下がその規約です。

5から11は上から記載する順番になっています。
1:ハッシュロケット記法・ハッシュシンタックス記法のどちらかで記法を統一する(※Rails5からハッシュロケット記法は廃止になるようです)

2:区切り符号を統一する(アポストロフィか引用符のいずれか一つ)

3:Gemリファレンスのコメントは消す

4:Gemに関するコメントは、そのGemと同じ行に記載する

5:一番上にGitリポジトリから引っ張ってきているGemのグループを記載する

6:プロジェクトのPathから引っ張ってきているGemのグループをGitのグループの下に記載する

7:全ての環境で使用するGemをグループにして記載する

8:本番環境で使うGemをグループにして記載する

9:Asset周りのGemをグループにして記載する

10:テスト関連のGemをグループにして記載する

11;開発環境のみで使用するGemをグループにして記載する

12:全てのグループにおいて、アルファベット順に上から記載する

13:新しくGemを追加する際も上記のルールに従う(当たり前やろ)

(こ、、、これが・・・・ 「Gemfileの13の誓約」 ッ!!)

結果

これらの誓約はGemfileに永遠の平穏をもたらすだろう・・・。
秩序が保たれ、論理的かつ合理的。Gemfileに関する「へま」は圧倒的に減少する事を約束しよう。

特ににアルファベット順に整頓することで、Gemの存在をマインドスキャン、いや、 「サイコショッカー」ばりのサーチ能力を全てのコードリーダーが手にする事ができる と断言しよう。

最後に

最後にRails newした直後に生成されるGemfileを整理整頓してお別れしよう。

アリーヴェデルチ。さよならだ。

Before
source 'https://rubygems.org'


# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.3'
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.1.0'
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby

# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0', group: :doc

# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use Unicorn as the app server
# gem 'unicorn'

# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug'

  # Access an IRB console on exception pages or by using <%= console %> in views
  gem 'web-console', '~> 2.0'

  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
  gem 'spring'
end

これが・・・・

After
source 'https://rubygems.org'

gem 'bcrypt'
gem 'jbuilder'
gem 'jquery-rails'
gem 'rails', '4.2.3'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'sqlite3'
gem 'therubyracer', platforms: :ruby
gem 'turbolinks'

group :production do
  gem 'unicorn'
end

group :assets do
  gem 'coffee-rails'
  gem 'sass-rails'
  gem 'uglifier'
end

group :development, :test do
  gem 'byebug'
  gem 'spring'
  gem 'web-console'
end

group :development do
  gem 'capistrano-rails'
end

こうなります・・・・!たぶん。

では。

32
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?