#odewc ほんのちょっとだけ Ruby on Rails してみた

>100 Views

May 23, 26

スライド概要

2026/05/23 に開催された「Okhotsk DEW Community 勉強会@北見」で発表した資料です。

ほんとうに、ほんのさわりの Ruby on Rails を見よう見まねで触れただけの話題なので、Ruby on Rails の技術的な話というより「そんなあたりが気になるのね」みたいに捉えることくらいしかできない資料なのですけれども、せっかくなので公開しておきますね。

なんにしても Ruby on Rails、その仕組みと Ruby の良さを上手に活かしたシステムに思えてそれが印象的でした。

profile-image

正統派趣味人プログラマー。プログラミングとは幼馴染です。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

ほんのちょっとだけ Ruby on Rails してみた 熊谷友宏 @es̲kumagai 2026/05/23 Okhotsk DEW Community 勉強会@北見

2.

▶︎ ▶︎ ▶︎ 熊谷 友宏 Tomohiro Kumagai Swift 言語が好み みんなで楽しむ勉強会が好み プログラミングの楽しさを伝えていきたい

3.

近況

4.

▶︎ ▶︎ ▶︎ Okhotsk DEW Community IT 2025/12/07 交流・勉強会 @ 網走 発表してきた。 『Swift 所有権 THE SECOND SEASON』 はじめての網走 のんびりとした勉強会で とても良かった

5.

▶︎ ▶︎ ▶︎ コミックマーケット 107 2025/12/31 東京ビッグサイト 発表してきた。 新刊なし 全作品的に、微妙に良好な売れ行き お隣のサークルさんが、船舶免許を 取得する気になってくれて嬉しかった

6.

▶︎ ▶︎ ▶︎ 日本女子囲碁リーグ 開幕式 2026/01/09 日本棋院 東京本院 人生初の囲碁イベントを訪れてみた。 華やかで、 わちゃわちゃした感じが印象的 はじめて、指導碁をしてもらって感動 木部夏生さん、格好良すぎた

7.

▶︎ ▶︎ 釣りフェス 2025 観覧 2026/01/18 パシフィコ横浜 釣りをテーマにした催しもの 村田基さんの キャスティングステージに感動する

8.

▶︎ ▶︎ ▶︎ 木部夏生三段サイン会 訪問 2026/02/28 こまどや @ 東京 木部夏生 三段による 出版記念サイン会 特製のサインを描いて頂いた ちなみに、夏は自分の好きな季節

9.

▶︎ ▶︎ 小型船舶 特定操縦免許 取得 2026/03/03 勝どきマリーナ @ 東京 旅客船向けの講習・試験 友人を乗せる上での安全面での基礎を 知っておきたくて、興味で取得してみた。

10.

▶︎ ▶︎ AIR旅チケット2 in セントレア 2026/03/07 中部国際空港 @ 愛知 中部国際空港を初めて訪れた 飛行機系の本が、やや良好な様子

11.

▶︎ ▶︎ 技術書典20 2026/04/12 池袋サンシャインシティ 頒布してきた。 新刊『Swift Concurrency 要諦』 かつて一緒に執筆会を開催してた友人が 復活出展されていて嬉しかった

12.

▶︎ ▶︎ ▶︎ 囲碁シル公式オフ会 参加 2026/04/24 新宿囲碁サロン @ 東京 日本棋院公式の囲碁ゲーム 『囲碁シル』の公式オフ会に参加してきた 監修の「大橋拓文 七段」と 「吉原由香里 六段」も参加された 初めて、第三者と対面で囲碁を遊んだ

13.

▶︎ ▶︎ ▶︎ 女流囲碁ブレーンズマッチ2026 大盤解説会 2026/04/29 日本棋院 東京本院 初めて、本格的な囲碁イベントを観覧 年齢層がとても広かった印象 上野愛咲美 女流名人、格好良い

14.

今後の予定

15.

▶︎ ▶︎ ▶︎ やさしい Swift 勉強会 2025/12/03 〜 SEASON 2 配信開始 アクセンチュア移行により SEASON 1 は終了(全 602 回) 個人的に SEASON 2 開始 YouTube ライブで配信 基本「月・水・金」で継続中

16.

同人誌即売会 おもしろ同人誌バザール@大阪 2026/06/28 オーバルホール @ 大阪 旅チケット 13 2026/10/10 大田区産業プラザ PiO @ 東京 おもしろ同人誌バザール@神保町 2026/11/01 @ ベルサール神保町 @ 東京 技術書典 21(募集前) 2026/11/23 池袋サンシャインシティ @ 東京

17.

前回の話題

18.

▶︎ ▶︎ ▶︎ ▶︎ ▶︎ 前回の話題 Ruby への印象 数値も文字もオブジェクトとして捉える姿勢に好印象 オブジェクト指向がきれいに描ける印象 わかりやすい言語な印象 • ここまでの知識で「なんとなく書いてみる」が出来た 動的型付けと型チェックのバランスが絶妙に思える こんなにきれいな言語が 既に 2000 年にあったと思うと革新的

19.

▶︎ ▶︎ 浮上した課題 Ruby の雰囲気は掴めても、使わないと身につかない Ruby を使う機会をつくれない

20.

▶︎ 浮上した課題 Ruby を使う機会をつくれない 使えるとしたら、シェルスクリプト? • まだ Ruby を描けなるほどには慣れていない • • つい、慣れている Perl を使ってしまう その出番的に、サクッと書きたい ➡ 別の機会をつくるのが良さそう …

21.

何で Ruby を実践してみる?

22.

何で Ruby を実践してみる? Ruby on Rails 試してみようか。

23.

⋯ そもそも Ruby on Rails とは ?

24.

試してみる前の印象 Ruby on Rails 名前はよく耳にする Ruby 版サーバーサイドスクリプト? 型に嵌められるのと引き換えに、簡単に作れる? 自分のサーバーサイドスクリプト経験 Microsoft IIS + ASP (VBScript) Apache + PHP CGI (Perl, C++, Swift) ⋯ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ ▶︎ Ruby on Rails 試してみようか。

25.

何で Ruby on Rails を学ぼう

26.

選んだ題材 • Wikipedia Ruby on Rails Guides • Rails Getting Started with Rails

27.

Ruby on Rails on Wikipedia

28.

➡︎ ▶︎ ➡︎ ▶︎ ▶︎ ▶︎ Ruby on Rails / on Wikipedia 概要 ルビーオンレイルス Web アプリケーションフレームワーク Ruby で書かれている そうなんだ MVC アーキテクチャー SwiftUI 登場前の iPhone も MVC

29.

➡︎ ▶︎ ➡︎ ▶︎ Ruby on Rails / on Wikipedia 基本理念 同じことを繰り返さない プログラミングの基本理念ともいえそう フルスタックフレームワーク たとえば、Active Record により、 プログラムと RDBMS の両方での定義を必要としないらしい 良い。ただし、入り口としては簡単になっても 細かい対処が必要な時に手に負えなくなりそうな不安もある

30.

➡︎ ▶︎ ▶︎ Ruby on Rails / on Wikipedia MVC » Model Active Record を通じて Model クラスを扱う ActiveRecord::Base のサブクラスで表現 • これによりどのテーブルの どのカラムを使うかを自動決定できる(?) データベースとの連携を想定した Model になっているの、 何かと扱いやすそうで好印象

31.

➡︎ ▶︎ ▶︎ ▶︎ Ruby on Rails / on Wikipedia MVC » View 表示のためのロジック コントローラークラスのデータを どのように表示するかを規定 HTML 内に若干のコードを埋め込むことで実現される ASP や PHP もそうだった(それと類似する?)

32.

➡︎ ▶︎ ➡︎ ▶︎ Ruby on Rails / on Wikipedia MVC » Controller Action Pack に含まれるコントローラークラスを使って実現(?) Action Pack とは、何だろう とりあえず、コントローラー用の基本クラスが 提供されていると捉えておけば良さそう? ブラウザーの操作から、該当するメソッドが呼び出される イベントドリブン的なの、良さそう

33.

➡︎ ▶︎ ▶︎ ▶︎ Ruby on Rails / on Wikipedia Merb Rails 3.0 の一環として Rails Web フレームワークに統合された Web アプリケーションフレームワーク(?) Rails 以上にフレキシブルで 処理が早いフレームワークにしようと考えられた(?) Rails 3 にこれらの機能のほとんどが組み込まれた(?) とりあえず、当初は独立して存在していた便利機能が 今は本流に取り込まれた ̶ という認識で良い?

34.

▶︎ ▶︎ Ruby on Rails / on Wikipedia Wikipedia からの印象 書かれていたのは、仕組みの概要くらい Ruby on Rails 何も分からない • そもそも Ruby on Rails は何で動かす? • 環境構築はどうやる? • どうやってコードを書いていく?

35.

Ruby on Rails on Rails Guides

36.

▶︎ ▶︎ Ruby on Rails / on Rails Guides Getting Started with Rails これに沿って、やってみよう • 導入 • 哲学 • Rails アプリを作る サンプルを写すだけだと Ruby の学習にならないので、 つくるものは自分で考える

37.

Rails で、何をつくる?

38.

➡︎ Rails で、何をつくる? 碁盤 にしてみる

39.

碁盤 をつくってみよう とりあえず、質素なものを。 • データベースに碁石の位置を記録する • 碁盤を描いて、石を表示する 実践環境 • macOS 26.4.1 • MacStudio (CPU: M1, Memory: 32GB) 今回の試みで仕上がった GitHub リポジトリー ➡︎ ▶︎ ▶︎ Getting Started with Rails

40.

※ 今回の試みで仕上がったもの 碁盤を描いて、石を表示するページ 碁石の位置を記録するページ 今回の試みで誕生した GitHub リポジトリー ➡︎ ▶︎ ▶︎ ▶︎ Getting Started with Rails +

41.

Getting Started with Rails +

42.

▶︎ Getting Started with Rails + 導入 Rails とは Ruby 言語向けに開発された Web フレームワーク

43.

➡︎ ▶︎ ▶︎ Getting Started with Rails + 哲学 (1) Ruby で書かれた Web アプリケーション開発フレームワーク Rails が良いとする方法でプログラムを書くことを推奨 • Rails のやり方を身につけることが大切 • 他のやり方を持ち込もうとすると、難しくなるかもしれない この潔さ、良いかもしれない

44.

➡︎ ➡︎ ▶︎ Getting Started with Rails + 哲学 (2) 2つの主要な指針 • 同じ情報を何度も書き直すことを避ける • 設定より規約を重視する 一般に規約は学習コストが高くなりがちに思うものの、 サーバー系の設定の汎用を意識した自由度は、かなり煩雑 規約に委ねるの、良い価値判断かもしれない

45.

➡︎ ▶︎ Getting Started with Rails + Rails アプリをつくる (1) 必要なもの これは、Getting Started with Rails サンプルの話? • Ruby 3.2 以上 % ruby --version ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.arm64e-darwin25] • Rails 8.1.0 以上 % rails --version Rails is not currently installed on this system.

46.

➡︎ ▶︎ Getting Started with Rails + Rails アプリをつくる (2) ところで Rails とは、なにのことを言うんだろう。 • Web サーバーは、何をつかう? • Rails は、サーバーのサービス? とりあえず、わからないまま進めていこう

47.

Ruby のインストール Ruby のバージョンアップが必要だった ruby 3.4.9 自分の環境では ruby.compile=false の指定が必要だった xcode-select --install brew install openssl@3 libyaml gmp rust brew install mise echo 'eval "$(/opt/homebrew/bin/mise activate)"' >> ~/.zshrc source ~/.zshrc mise settings ruby.compile=false mise use -g ruby@3 ➡︎ ▶︎ ▶︎ Getting Started with Rails +

48.

Rails のインストール Rails を新規インストールした rails 8.1.3 Rails のインストール完了後、 • RubyGems の最新版があると出たので、更新しておいた ターミナルを再起動してから rails が使用可能になった • gem install rails > A new release of RubyGems is available: 3.6.9 → 4.0.11! > Run gem update --system 4.0.11 to update your installation. ➡︎ ▶︎ ▶︎ Getting Started with Rails +

49.

▶︎ Getting Started with Rails + Rails アプリの作成 今回は「碁盤」アプリをつくることにする rails new igo • 最初から Git リポジトリーが作られているの、良い • Kamal デプロイメントシステム … とは? • igo フォルダーが生成され、いろいろ入っている

50.

Getting Started with Rails + Rails アプリを動かしてみる bin/rails db:create > Created database 'storage/development.sqlite3' > Created database 'storage/test.sqlite3' bin/rails server • ローカル Web サーバーがスタンバイした http://127.0.0.1:3000 でアクセスできた • • 開発サーバー環境を別途用意しないで試せるの、良い • オートロード機能もあるらしいの、良さそう

51.

▶︎ ▶︎ Getting Started with Rails + データベースモデルの作成 (1) 今回は「棋譜」データを持たせることにする Active Record を使うらしい(聞き覚えのある言葉) • 内部的には、既定で SQLite が使われるらしい(良い) bin/rails generate model Kifu bin/rails generate model Move kifu:references \ move_number:integer \ x:integer y:integer \ color:integer bin/rails db:migrate

52.

▶︎ Getting Started with Rails + データベースモデルの作成 (2) 生成された Ruby ファイル Kifu.rb に リレーションの設定を追記した class Kifu < ApplicationRecord has_many :moves, dependent: :destroy end • コマンドで再度調整するときに • 設定が消えないかなど、不安を覚えた これは、コマンドではなく手作業で書くもの?

53.

▶︎ Getting Started with Rails + データベースモデルの作成 (3) 生成された Ruby ファイル move.rb に 色を表現する列挙型を追記した class Move < ApplicationRecord belongs_to :kifu enum :color, { black: 0, white: 1 } end • 別ファイルで拡張するのと、どちらが良い?

54.

➡︎ ▶︎ ➡︎ ▶︎ ▶︎ Getting Started with Rails + データベースモデルの作成 (4) Kifu と Move が完成した サクッとつくれる印象は持ちつつ、何気なく苦労した。 • 失敗してやり直したときに、 身に覚えのないテーブルが残り SQL での削除が必要になった DB をラップする仕組みなら、ありがちなこととも言える 今のところ、モデル周りを改良していける自信はない 必要な都度、慣れていけば大丈夫だろう

55.

➡︎ ➡︎ ➡︎ ▶︎ Getting Started with Rails + Web ページを作っていく Route, アクションを持つ Controller, View が必要になるらしい • Controller のアクションで、 • Route で、リクエストをアクションに紐づける リクエストをメソッドにマップする仕組み、良い • リクエストを処理して表示データを用意する いったんコントローラーで情報を揃える機会を作るの、良い ビューは、データを希望の形式で表示する アクションのおかげで、ビューがかなりシンプルになる印象

56.

▶︎ Getting Started with Rails + Route の定義 今回は 2 つのルートを用意してみる • 碁盤を表示する • 碁石の位置を登録する Rails.application.routes.draw do get "/kifu/:id", to: "kifu#show", as: :kifu get "/kifu/:id/move", to: "kifu#move" post "/kifu/:id/move", to: "kifu#move_add", as: :kifu_move end • to や as の意味をここで理解できなかった • routes.rb に書けるの、好印象(サーバー設定として分離されていない) (コントローラーの流儀を知らない)

57.

➡︎ Getting Started with Rails + コントローラーとアクションの定義 (1) bin/rails generate controller Kifu show --skip-routes • メソッドで定義された show は、アクション? • コマンド実行で KifuController が作られた • メソッドの実装は、空 • 空でも views/kifu/show.html.erb の内容が表示されるらしい 処理から表示へと繋ぐ必要がないの、好印象

58.

➡︎ Getting Started with Rails + コントローラーとアクションの定義 (2) • kifu/:id/move のアクションは、どう作るのだろう • KifuController が引き受けても良いもの? • コマンドで実装しようとする限りでは、共存できない? • bin/rails generate controller Kifu move --skip-routes • こうすると KifuController が既にあるとしてエラーになる • 上書きすると show メソッドが消える KifuController に move メソッドを手作業で追加すれば大丈夫っぽい

59.

コントローラーとアクションを動かしてみる • http://127.0.0.1:3000/kifu/1 で表示された • これで Kifu#show 用のページが表示されるのは、何故だろう • http://127.0.0.1:3000/kifu/1/move も Kifu#move 用のページで表示される様子 Route の to 指定と、暗黙的な名前マッピングで、 コントローラーとメソッド、ビューを特定している と認識した ここの繋がりを最初に知れたら、ずいぶん安心だったかも知れない ⋯ ➡︎ Getting Started with Rails +

60.

▶︎ Getting Started with Rails + 碁石の位置を登録する画面をつくる (1) KifuController のアクションで使うメソッドを実装 def next_move_number @kifu.moves.maximum(:move_number).to_i + 1 end def next_move_color if @kifu.moves.order(move_number: :desc).first&.black? :white else :black end end

61.

▶︎ Getting Started with Rails + 碁石の位置を登録する画面をつくる (2) KifuController の move メソッドを実装 def move @kifu = Kifu.find_or_create_by!(id: params[:id]) @move = @kifu.moves.new( move_number: next_move_number, color: next_move_color) end • 必要なデータをインスタンス変数で揃えるの、好印象

62.

碁石の位置を登録する画面をつくる (3) move.html.erb で入力画面をつくる • 入力フォームは form_with を使う - model: @move - url: kifu_move_path(@kifu) - method: :post オプションの指定が独特で、正解に辿り着くのが難しかった • 列挙型の値は Move.colors.keys で取得する • colors が自動定義されるの、新鮮だった POST ルート作成を忘れて、エラーから原因を察せず悩んだ • 各種入力項目は <%= form.number_field :x %> のようにする ➡︎ ➡︎ ▶︎ Getting Started with Rails +

63.

▶︎ Getting Started with Rails + 碁石の位置を登録する画面をつくる (4) KifuController のアクションで使うメソッドを追加実装 def move_params params.require(:move).permit(:move_number, :color, :x, :y) end • 今もまだ、雰囲気だけで実装中(そのうち理解はできそう) • この実装、知らないとぜんぜん分からない印象

64.

▶︎ Getting Started with Rails + 碁石の位置を登録する画面をつくる (5) KifuController の move_add メソッドを追加実装 def move_add @kifu = Kifu.find_or_create_by!(id: params[:id]) @move = @kifu.moves.new(move_params) if @move.save redirect_to kifu_move_path(@kifu) else render :move, status: :unprocessable_entity end end

65.

碁石の位置を登録する画面をつくる (6) 入力画面をつくっていて悩んだところ • 列挙型 color を定義していたら • colors が自動定義されるのが新鮮だった POST ルート作成を忘れていて、 • その原因をエラーから察せなくて悩んだ モデルの操作方法を理解するのに時間がかかった • form_with の引数指定が独特で、正解に辿り着くのが難しかった どれも流儀を知らなかっただけで、 慣れてしまえば、どれも簡単に扱えそうな印象 ➡︎ ▶︎ Getting Started with Rails +

66.

▶︎ ▶︎ ▶︎ Getting Started with Rails + 碁石の位置を登録する画面、完成 ようやく完成した印象 やったことは難しくなくて、慣れれば簡単そう データベースへの書き込み処理を意識させないのがすごい

67.

▶︎ Getting Started with Rails + 碁盤を表示する画面をつくる (1) KifuController の show メソッドを実装 def show @stars = [[4, 4], [4, 10], [4, 16], [10, 4], [10, 10], [10, 16], [16, 4], [16, 10], [16, 16]] @kifu = Kifu.find_or_create_by!(id: params[:id]) @moves = @kifu.moves.order(move_number: :asc) @positions = @moves.each_with_object({}) do |move, stones| stones[[move.x, move.y]] = move end end • 変数宣言を必要としない特色が、強みになっている印象

68.

碁盤を表示する画面をつくる (2) show.html.erb で碁盤表示画面をつくっていく • 碁盤の表示部分(抜粋) <div id="go-board" class="go-board"> <% 1.upto(19) do |y| %> <% 1.upto(19) do |x| %> <% end %> <% end %> </div> • ︙ ▶︎ Getting Started with Rails + ASP や PHP と似た記述方式で(個人的に)安心した むしろ、コントローラーが存在するおかげで明瞭に書けそう

69.

▶︎ Getting Started with Rails + 碁盤を表示する画面をつくる (3) show.html.erb で碁盤表示画面をつくっていく • 各繰り返しでの、碁石の表示部分(抜粋) <% move = @positions[[x, y]] %> <div class="point<%= " star" if @stars.include?([x, y]) %>"> <% if move %> <span class="stone <%= move.color %>"> <%= move.move_number %> </span> <% end %> </div>

70.

碁盤を表示する画面をつくる (4) 碁盤のデザインを記述する • 既存の application.css に記述して対応 最初から CSS が想定されているの、良い 1手1手、順番に表示したくなったので対応 • 普通の DHTML みたいに書けるの、好印象 そういえば、show.html.erb で使うスクリプトを • ここに書くのは 正しい?(違いそうな予感) 既存の application.js に JavaScript を記述 ⋯ ➡︎ ▶︎ ➡︎ ▶︎ Getting Started with Rails +

71.

Getting Started with Rails + 碁盤を表示する画面、完成

72.

ひとまず、満足

73.

➡︎ ▶︎ ▶︎ ➡︎ ▶︎ ▶︎ ▶︎ ひとまず、満足 Ruby on Rails してみた印象 (1) 分からないことが多くて手間取ったものの、 用途や記述方法が整っていて、学習コストは低そうな印象 Web サービスで、Rails で敷かれたレールから 外れるケースは少なそうな予感 コントローラーが入口になるの、とても良い ASP や PHP はページが入口で、分散しがちだった印象 記述すべき箇所が用意されていて、迷いにくかった すべて Ruby で記述できるの、良い 学習コストが抑えられる

74.

➡︎ ▶︎ ひとまず、満足 Ruby on Rails してみた印象 (2) 単純明快な Ruby コードしか書いていない気がする • Route, Controller, View の分割が、功を奏している印象 • インスタンス変数が、とてもよく生かされている印象 • 変数宣言を必要としない仕様が生きている印象 • 戻り値で return を必要としない仕様が生きている印象 • キーワード引数の仕様が生きている印象 おかげさまで(?)Ruby を書いた気がしていない

75.

➡︎ ▶︎ ▶︎ ▶︎ ひとまず、満足 Ruby on Rails してみた印象 (3) いろいろなものが自動で定義されるの、興味深い • Move.colors • kifu_path 若干の不安を覚えているところ(自分の知識不足) • bin/rails routes で、知らないルートがたくさん出てくる • データベースの扱いがまだよく分からない • 知らないファイルがたくさんある 分からないところが認識できてきたのは、安心材料 引き続き、自力でも知識を深めていけそうな予感

76.

Ruby on Rails 体験を終えて

77.

▶︎ ▶︎ Ruby on Rails 体験を終えて まとめ 軽快に扱えそうなシステムに感じた Ruby を書けるようになりたい ̶ という 当初の目的は達成できずに終わった感

78.

※ 今回の試みで仕上がったもの 碁盤を描いて、石を表示するページ 碁石の位置を記録するページ 今回の試みで誕生した GitHub リポジトリー ➡︎ ▶︎ ▶︎ ▶︎ Getting Started with Rails +