10年のブランクを経て、Rails開発に挑戦した私がこの1年で「やっててよかった」6つのこと

に公開

はじめに

ゲームエンジニアのM.O.です。
前職ではプログラマとして業務をしていましたが、キャリアを重ねるにつれて次第に管理業務が中心となり、約10年間、実装の現場から離れていました。
そんな私が、再び開発の現場に戻り、Ruby on Railsを使った開発に挑戦し始めてから、1年が経ちました。
特にサーバーサイドプログラミングは未経験だったため、日々が新しい学びの連続でした。

この記事は、

  • 私と同じように、ブランクを経て再び実装の現場に戻ってきた方
  • 新しい技術領域(特にサーバーサイド)に挑戦しているエンジニアの方
  • これからRuby on Railsを学ぼうとしている方

に向けて、この1年間で「これは本当にやっておいてよかった!」と心から感じたことを、具体的なツールや習慣を交えて6つにまとめてみました。

やっててよかったことリスト

1. 開発の土台となった『Ruby on Rails チュートリアル』

サーバーサイド開発の経験が全くなかった私にとって、Ruby on Rails チュートリアルは、まず全体像を掴むための羅針盤となってくれました。もしこれに取り組まずに業務を始めていたら、相当な困難があったと思います。
特に、以下の基礎知識を体系的に学べたのが大きな収穫でした。

  • MVCの概念:Model, View, Controllerの明確な役割分担。
  • Migrationの仕組み:データベースの構造をコードで管理するという考え方。
  • ジェネレータ周りのコマンド:rails gなどのコマンドで効率的にファイルを作成する便利さ。

実務のコードを読んでいて詰まった時も、このチュートリアルで得た言葉や概念の知識が、何を調べるべきかの「とっかかり」となり、調査を進める上で大きな助けになりました。

2. コミュニティに参加して「外の世界」を知る

10年のブランクがある「ベテランの初心者」という立場から、「こんな初歩的なことを聞いて、時間を奪うのは申し訳ない…」という気持ちが先行し、あと一歩が踏み出せない場面がありました。
そんな時に私の背中を押してくれたのが、外部のRuby交流会でした。
多様なバックグラウンドを持つエンジニアの方々と技術的な交流ができたのは、非常に刺激的な経験でした。
自分と同じように新しい挑戦をしている方と話せたことや、そうした場に集まる方々のモチベーションの高さに触れたことで、「自分ももっと頑張ろう!」という前向きなエネルギーをもらえたのが、一番の収穫だったかもしれません。

3. Ruby本人と"対話"できる最強の相棒 binding.pry

私は開発でRubyMineというエディタを使っています。
RubyMineには強力なデバッグ機能があり、私はその機能だけで十分だと考えていました。

しかし、Minitestを使ったテストの実行中や、Rakeタスクの実行中など、普段の開発と少し異なる環境でデバッグが必要になった時、その都度エディタのデバッグ設定と格闘する必要がありました。
「今すぐ問題の原因を突き止めたいのに、なぜデバッグ環境を整えるという別の問題に時間を奪われているんだ…」と、強い無駄と焦りを感じていました。

そんな時、役に立ったのがbinding.pryでした。環境ごとの複雑な設定は一切不要で、ただ一行、調べたい箇所に書き加えるだけで、どんな実行環境でも処理を止めて、調査を始めることができます。

以前参加したRubyの交流会で、Rubyの仙人みたいな方が 「Rubyでわからないことは、Ruby本人に聞けばいいんですよ」 と語っていました。
binding.pryは、まさにその「本人に聞く」を可能にします。例えば、userという変数の中身を調べたい場合、binding.pryで止めたコンソールで以下のようなコマンドを打ち込みます。

# [1] pry(main)> user
# => <User id: 1, name: "Yamada", email: "yamada@example.com">
# 変数名を直接打つと、その時点での中身を見せてくれる

# [2] pry(main)> user.class
# => User(id: integer, name: string, email: string)
# .class と打ち込むと、そのオブジェクトがどのクラスから作られているかがわかる

# [3] pry(main)> user.methods
# => [:id, :id=, :name, :name=, :email, :email=, ...]
# .methods と打ち込むと、そのオブジェクトが持っているメソッドの一覧を確認できる
#(非常に大量に表示されるので、こういうものがあると知っておくだけでも便利です)

もちろん、エディタが持つグラフィカルなデバッグ機能は非常に強力で、腰を据えた調査ではそちらが適しているケースも多々あります。
ただ、 「binding.pryという選択肢を知っている」 ということ自体が、私にとっては大きな精神的な支えになっています。
この「いつでも立ち返れる場所がある」という安心感が、日々のデバッグ作業のストレスを大きく軽減してくれています。

4. 面倒なコマンドのショートカット化(効率化手法)

Rails開発では、rails db:migrateや特定のマイグレーションをdownする際など、ターミナルで繰り返し実行する定型的なコマンドがいくつかあります。
こうしたコマンドを楽にするために、私は 「シェルスクリプト」と「エイリアス」 という2つの手法を使い分けています。

Rails関連のコマンドには、少し応用的なシェルスクリプトを使っています。
これは、よく使うコマンドをスクリプト化し、__から始まる名前で保存しておく、というやり方です。こうすることで、ターミナルで__と入力した後にTabキーを押すと、自作したスクリプトの一覧が補完候補として表示されます。
※自作のスクリプトはプロジェクトに特化したものが多いですが、Rails環境で汎用に使えそうなスクリプト例を紹介します。
▼ __migrate.sh (マイグレーション実行用) 最もシンプルな例です。

#!/bin/sh

rails db:migrate

▼ __down.sh (指定バージョンをDownする用) こちらは少し工夫したスクリプトです。エディタからマイグレーションファイルをターミナルにドラッグ&ドロップするだけで、ファイルパスからバージョン番号を自動で抽出し、migrate:downを実行してくれます。

#!/bin/bash

# 引数で渡されたファイルパスを取得
raw_input=$1

# パスが渡されなかった場合は使い方を表示
if [ -z "$raw_input" ]; then
  echo "Usage: $0 <migration_file_path>"
  echo "You can drag and drop the migration file from your editor."
  exit 1
fi

# パスからファイル名だけを抽出 (e.g., .../20250913123456_...rb)
file_name=$(basename "$raw_input")

# ファイル名からバージョン番号を抽出 (e.g., 20250913123456)
version=$(echo $file_name | cut -d'_' -f1)

echo "Running migrate:down for version: $version"
rails db:migrate:down VERSION=$version

一方で、Git関連のコマンドには、より手軽なエイリアス機能を使っています。

# .gitconfigに記述
[alias]
  c = checkout
  p = pull

これで、git c [ブランチ名]でチェックアウトしたり、git c .でローカルの編集を削除したりと、コマンドの入力や思い出す手間をカットしています。
** ただし、注意点も… ** こうした手法には一長一短な面もあります。
デメリットは、カスタムした自分の環境に慣れすぎると、本来のコマンドの把握が甘くなってしまうことです。
その結果、ペアプログラミングで人のPCを触る時など、「自分のPC以外では何もできなくなる」という状況に陥る可能性があります。

5. ターミナルを「作業部屋」のように整理する

ある日、先輩のターミナル画面が、用途ごとにタブで整理されているのを目にしました。
これを真似てみたところ、私の開発効率が向上しました。
私のセットアップはこんな感じです。

  • タブ1(茶色):rails db:migrateやgitコマンド用
  • タブ2(青色):rails sなどサーバー起動用
  • タブ3(黒色):汎用的な作業用

タブごとに背景色を変えることで、視覚的に「今どの作業をしているか」を瞬時に判断できます。
さらに、タブごとにコマンド履歴が独立して保存されるため、マイグレーション用のタブで↑キーを押せば、直前に実行したrailsコマンドがすぐに見つかります。

6. 「テストは面倒」の思い込みを覆してくれた、テストコード

テストを書く文化に馴染みのなかった私は、正直に言うと、学習中はこれを少し億劫に感じていました。
しかし、実務を通じてその認識は大きく変わりました。
私にとってテストとは、未来の品質を守る「お守り」というより、
実装を細かい単位で確認しながら対話的に進めていくための「効率化ツール」 なのだと気づいたのです。
今でも「メソッドを作る前に、まずテストから書く」という完璧なTDDを実践できているわけではありません。
そこで、私なりに見つけたのが 「自分に合った粒度でテストを先に書く」 という方法です。
例えば、新しいAPIを作る時。まず、正常系のテストケースだけを先に書きます。
そして、そのテストが通ることを目指して実装を進めていく。このやり方なら、常にゴールが明確な状態で開発を進められ、今の私に合っていると感じています。

おわりに

10年ぶりに本格的な実装の現場に戻り、特に未経験のサーバーサイド開発に挑戦したこの1年間は、決して平坦な道のりではありませんでした。
しかし、今回ご紹介したような小さな工夫や新しい習慣の積み重ねが、ブランクという不安を乗り越え、再び開発を楽しむための大きな助けになったと実感しています。
この記事が、私と同じように新しい挑戦をしているエンジニアの皆さんにとって、少しでもヒントになれば幸いです。
最後まで読んでいただき、ありがとうございました!

Happy Elements

Discussion