Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20200612_出張_Railsウォッチ_in_銀座Rails_22

 20200612_出張_Railsウォッチ_in_銀座Rails_22

2020/06/12に銀座Rails#22で発表したスライドです。
https://ginza-rails.connpass.com/event/176491/
週刊Railsウォッチ: https://techracho.bpsinc.jp/tag/%e9%80%b1%e5%88%8arails%e3%82%a6%e3%82%a9%e3%83%83%e3%83%81

スライド内で紹介しているサンプルテンプレーコードのGistは以下
https://gist.github.com/morimorihoge/7ae85e62ebd848003d74fcbd2a98fa58

Masato Mori

June 12, 2020
Tweet

More Decks by Masato Mori

Other Decks in Programming

Transcript

  1. About Me
 • 森 雅智: @morimorihoge
 • BPS株式会社でRailsの受託開発チームをやってたり、週1大学非常勤で Web開発を教えてたりします
 •

    Ruby/Rails歴は11年くらい。Web開発は17年くらい
 • 銀座Ralis #10でActiveRecordでVIEWを使おうという話をしました
 About BPS & TechRacho
 • Web受託開発や電子書籍製品開発をやっている会社です
 • TechRachoという自社技術Blogを運営しています
 ◦ 3年半ほど前から平日毎日更新してます
 ◦ https://techracho.bpsinc.jp/ • お仕事相談、転職相談、TechRachoへのご意見など気軽にどうぞ
 ◦ https://www.bpsinc.jp/ 2

  2. これまでの出張Railsウォッチのピックアップテーマ
 • Rails6新機能特集
 ◦ 銀座Rails#12: 複数DB対応
 ◦ 銀座Rails#13: ActionText、Trix
 ◦

    銀座Rails#14: ActionMailbox
 • Railsアプリケーション開発に関する雑多なテーマ
 ◦ 銀座Rails#15: production、development、staging環境について
 ◦ 銀座Rails#16: 機能開発の設計レビューについて
 ◦ 銀座Rails#17: リソース管理スコープについて
 • 開発一般な話
 ◦ 銀座Rails#19: 開発チームの冗長化について
 ◦ 銀座Rails#20: Excelと仲良くしよう
 ◦ 銀座Rails#21: 標準仕様を読むためのABNF
 4
 ※過去のスライドはTechRachoにて公開しています。「TechRacho 銀座Rails」あたりで 検索するとヒットしますので興味のある方はどうぞ

  3. RubyでCLIプログラミングするモチベーション
 • シェルスクリプトの代替としてちょっとしたバッチ処理やツールを作りたい
 ◦ 普段慣れた言語で書ける安心感があって良い
 ◦ pure rubyで作っておくとRails環境がなくても動かせるため、自由度が 高い
 •

    複雑かつ大量のログ解析など、シェルやワンライナーでは厳しい処理をし たい
 ◦ 障害調査の場合などに有用
 • Ralisの実行コンテキストで動作するスクリプトを作りたい
 ◦ rails runner経由で実行すると通常のスクリプト実行の感覚で利用する ことができる

  4. RubyでCLIプログラムを書くための基本
 • 1行目にshebangを書く: #!/usr/bin/env ruby • chmodで実行権限(x)を付ける: chmod +x #{filename}

    ◦ shebangが設定されていれば拡張子はrbでなくてもOK 
 • コマンドライン引数はARGV配列に入っているのでそこから取れる
 • 標準入出力など
 ◦ STDIN / STDOUT / STDERRがIOクラスとして取れる(readや each_lineできます)
 7
 ARGV[0]
 ARGV[1]
 ARGV[2]

  5. OptionParserとは?
 8
 • Ruby本体の組み込みライブラリで、コマンドライン引数やオプションをいい 感じに処理してくれる
 ◦ require ‘optparse’ すればすぐに使えます
 •

    単純なオプション解釈だけでなく、help表示なども内包しておりあまり頑張ら なくてもCLIコマンドとしていい感じに仕上げることができる

  6. その他知っておくと捗る組み込みライブラリなど
 • Open3モジュールを使うと任意のコマンドを実行しつつ、標準入出力をRuby で受けて処理することができる
 ◦ スクリプト内で別プログラムの実行結果を受け取りたいときに便利 
 • 任意コマンド実行時はShellwordsモジュールを使うとエスケープが必要な 文字が含まれていても安全に実行できる


    • ERBも使えるので、出力したいものがHTMLやYAMLなどの形式の場合に は併用すると便利
 • DATAというFileオブジェクトがあり、ソースコードの__END__以降のデータ にアクセスできる
 ◦ 前述のERBテンプレートを1ソースファイルにまとめて書くなどに利用できる 
 ◦ ※1ファイルに統合しておくと、別ホストに持って行って利用する場合に便利 
 13

  7. OptionParserとCLIまとめ
 • Rubyスクリプトで柔軟に引数を処理することができる
 • Ruby組み込みライブラリのため、ポータビリティの高いツールを作るこ とができる
 ◦ Railsやその他追加インストールGemがなくてもここまでできる!というのは強い
 • Rails

    runner経由であれば、Rails前提のコードもコマンドライン引数を受 けとって処理することができる
 ◦ ただし、Rakeタスクとは別管理になってしまうのは注意
 ◦ ※Rakeタスクと違いrake -vでの一覧などができないため、スクリプトの置き場所に は注意
 15