Top View


Author Yuhei Okazaki

Fusic CLIを作りました! - RubyでCLIを開発する

2021/09/10

Table of Contents

使い方

インストール

前提として、PCにRuby 2.7以降がインストールされていることをご確認ください🙏

以下のコマンドを実行することでインストールします。

$ gem install fusic-cli-ruby

コマンド実行

トップページを開く例です。

$ fusic top
https://fusic.co.jp/
# => この時、ブラウザが自動起動してFusicコーポレートサイトのトップページが表示されます。

他にも以下のようなコマンドを用意しています。

$ fusic blog            # Fusicってなんしようと? を開く
$ fusic members         # メンバー紹介 を開く
$ fusic news            # ニュース を開く
$ fusic outline         # 会社概要 を開く
$ fusic techblog        # Fusic Tech Blog を開く

サブコマンドは全て正確に入力する必要はなく、ほかと区別できる文字が入力されていれば機能します。

$ fusic m        # メンバー紹介 を開く
$ fusic te       # Fusic Tech Blog を開く

製作過程

せっかくなので、どのような手順で作成したかご紹介します。

ソースコードは こちら で公開しているので、適宜参照ください。

RubyGemを作る

以下のコマンドを実行することでRubyGemの雛形一式が自動生成されます。

$ bundle gem -t rspec --exe fizzbuzz

コードが生成されたら、gemspecファイルを編集し、RubyGemの情報や依存するGem等を記載します。詳細は fusic-cli-ruby.gemspec を参照ください。

ThorによるCLIの実装

RubyでCLIといえばThorですね。これを使うことでかなりお手軽に実装することができました。

ソースコードでいうと fusic-cli-ruby/lib/fusic_cli_ruby/cli.rb がThorを使ってコマンドの仕様を定義している部分となります。

RuboCopによるコードフォーマット

RuboCopに限らず早い段階でコードチェック・コードフォーマットしておくことは大事です。

基本的にはデフォルトのルールに則って、どうしても従えないものに限りルールを無効化しています。設定ファイルは .rubocop.yml を参照ください。

RSpecによるユニットテストとCLI実行テスト

ちゃんとテストを書いています。ユニットテストは fusic-cli-ruby/spec/fusic_cli_ruby/fusic_spec.rb が該当します。「所定のURLをブラウザで開く」というシンプルなCLIなのでテストもシンプルです。

これとは別に、 aruba というGemを使ってCLIの実行および出力もテストしています。fusic-cli-ruby/spec/cli_spec.rb がテストファイルです。

Guardによるコードフォーマットとテストの自動実行

コーディング中にRubocopやRSpecをいちいち起動するのは面倒なので、 Guard を使うことでファイル保存時に自動実行されるようにしています。快適です。

FAQ

なぜRubyで書いたのか?

今までRubyでCLIというものを書いたことがなかったからです。

他のページには対応してくれないのか?

随時対応したいと思います。要望などあれば issues へお願いします。

まとめ

良ければ使ってみてください!

Yuhei Okazaki

Yuhei Okazaki

Twitter X

2018年の年明けに組込み畑からやってきた、2児の父 兼 Webエンジニアです。 mockmockの開発・運用を担当しており、組込みエンジニア時代の経験を活かしてデバイスをプログラミングしたり、簡易的なIoTシステムを作ったりしています。主な開発言語はRuby、時々Go。