Rubyでコマンドラインインターフェース(CLI)を構築する方法:ステップバイステップガイド
コマンドラインインターフェース(CLI)の開発を考えていますか?それは素晴らしいプロジェクトのアイデアです!このガイドでは、Rubyを使ってCLIを構築する方法を、初心者にもわかりやすくステップごとに解説します。
始める前に、お使いのコンピュータにRubyがインストールされていること、そしてUnixコマンドを実行できるターミナルを使用していることを確認してください。LinuxやmacOSをお使いであれば、Unix互換のターミナルが最初から搭載されています。準備が整えば、すぐに始められます!
コマンドラインインターフェース(CLI)とは?
プログラミングの学習を始めると、必ず「ターミナル」という存在に出会います。ターミナルウィンドウから操作できるのがコマンドラインインターフェース(CLI)で、テキストコマンドを使ってプログラムを実行・操作できます。
ターミナルを使えば、マウスやGUIアプリケーションなしでコンピュータに指示を出せます。コーディング中は命令を書くことに集中できるため作業効率が上がり、さらにツールごとに新しいユーザーインターフェースを覚える必要もありません。
これまで使ってきたCLIの多くは、他の開発者によって作られたものです。例えば、PythonのCLIならターミナルからPythonを実行でき、RubyのCLIならRubyアプリケーションを同じように実行できます。そして嬉しいことに、自分でもCLIを作れるのです!
準備:プロジェクトフォルダを作成する
まず、ターミナルウィンドウを開き、mkdirコマンドでコード用のフォルダを作成します。
mkdir ruby-cli
このコマンドで「ruby-cli」という名前のフォルダが作成されます。次にcdコマンドでそのフォルダに移動しましょう。
cd ruby-cli
これで準備完了です。それでは、いよいよCLIの作成に取り掛かりましょう。
最初のCLIを作る
最初に追加するのは、ターミナルに「This is an example CLI(これはサンプルCLIです)」という文字列を出力する機能です。「home.rb」という新しいファイルを作成し、そこにコードを書いていきます。
新しいファイルを作成するには、次のコマンドを使います。
nano home.rb
nanoテキストエディタが開くので、ここにプログラムのコードを入力します。vimやemacsなど、別のエディタを使っても問題ありません。
エディタに以下のコードを貼り付けてください。
#!/usr/bin/env ruby puts "This is an example CLI"
Macの場合はControl-Xを押し、「Y」、続けてEnterキーで保存します。これで「ruby-cli」フォルダ内に「home.rb」ファイルが作成されました。
コードの1行目は、このファイルをRubyインタプリタで実行することをコンピュータに伝えるシバン(shebang)です。これにより、コードが確実にRubyで実行されます。2行目は、プログラムに「This is an example CLI」という文字列をコンソールへ出力するよう指示しています。
それでは、rubyコマンドでファイルを実行してみましょう。
ruby home.rb
実行結果:
This is an example CLI
これで簡単なCLIが完成しました。「home.rb」を実行すると、コンソールに文字列が出力されます。
フラグを使ってユーザー入力を受け付ける
現時点でのCLIは、メッセージを表示するだけのシンプルなものです。ユーザーからの入力を受け付けたい場合はどうすればよいでしょうか?そんなときに活躍するのがoptparseライブラリです。これを使うと、コマンドラインから渡されたオプションを解析し、プログラム内で利用できるようになります。
optparseライブラリを選ぶ理由は主に2つあります。1つ目は、各コマンドのヘルプメニューを自動生成できること。2つ目は、Rubyに標準で組み込まれているため、追加インストールが一切不要なことです。
ここでは、ユーザーのメールアドレスを入力として受け取り、それをコンソールに返す機能を追加してみましょう。
「home.rb」をテキストエディタで開き、内容を以下のコードに置き換えてください。
#!/usr/bin/env ruby
require 'optparse'
options = {}
OptionParser.new do |op|
op.on("-e", "--email", "Your email address") do |value|
options[:name] = value
end
end.parse!
puts 'Your email address is: ' + options[:name]
このコードでは、optparseライブラリを使ってコマンド経由で送られたデータを解析し、ユーザーが指定した値を変数に代入してコンソールに出力しています。具体的には、「Your email address is: 」に続けて、ユーザーが指定したメールアドレスを表示します。
以下のコマンドでコードを試してみましょう。
ruby home.rb -e jack@jones.com
実行結果:
Your email address is: jack@jones.com
optparseライブラリの便利な点は、ヘルプメニューを自動生成してくれることです。次のコマンドで確認できます。
ruby home.rb --help
実行結果:
Usage: ruby [options]
-e, --email Your email address
コマンド実行時には、短縮形の-eと完全形の--email、どちらのフラグでも使用できます。
対話形式でユーザー入力を受け付ける
先ほどの例ではフラグを使ってユーザー入力を受け付けました。しかし、複数の情報を受け付けたい場合、フラグ方式は不便になることがあります。
RubyでCLIを作る魅力のひとつは、どんなRubyプログラムでもそのままCLIにできる点です。新しい作法を覚える必要はまったくありません。
ここでは、ユーザーの名前と年齢を尋ね、16歳以上かどうかを判定するアプリケーションを作ってみましょう。
まず、次のコマンドでnanoエディタを開きます。
nano input.rb
新しく作成したファイルに、以下のコードを貼り付けてください。
puts "What is your name?"
name = gets
puts "What is your age?"
age = gets
if age.to_i >= 16
puts "#{name}! You are 16 or older!"
else
puts "#{name}! You are not over the age of 16!"
end
ファイルを保存したら、次のコマンドで新しいCLIを実行できます。
ruby input.rb
実行結果:
What is your name? James What is your age? 17 James! You are 16 or older!
「What is your age?」という質問に対して「14」と入力した場合は、次のように表示されます。
James! You are not over the age of 16!
このように、CLIには好きなRubyコードを自由に組み込めます。唯一の制限は、あなたの想像力だけです。
まとめ
CLIを使うと、ターミナル経由でプログラムと直接やり取りできます。これは、AtomやNotepadのようなGUI(グラフィカルユーザーインターフェース)の代替手段となるものです。
このガイドでは、Rubyを使ったシンプルなCLIの作り方を紹介しました。基本的な出力から、optparseによるフラグ処理、対話形式の入力受け付けまでをマスターした今、あなたもRuby開発者のように独自のCLIを作り始める準備が整いました!
-
C拡張機能からRubyメソッドを呼び出す際のメモリリークを防ぐ方法
メモリリークはgemユーザーにとって頭痛の種です。原因の追跡が難しく、高額なインフラコストにつながることもあります。 C拡張内で発生するメモリリークはさらに厄介です。Rubyにおけるリーク発見のためのツールや解説記事は豊富にありますが、Cでは内部構造に同じようにはアクセスできません。 rb_funcallの安易な使用はメモリリークを引き起こす可能性があります。代わりにrb_protectを使う方がはるかに安全です。C拡張の開発者の方は、あなたのgemを使う開発者のために、ぜひこの記事を読んでみてください。 それでは始めましょう! rb_funcallとCの問題点 rb_funcallは、ライブ
-
AppSignalで実現するNGINX自動パフォーマンス監視:リアルタイムインサイトとMagic Dashboards活用ガイド
NGINXのパフォーマンスを正確に把握するのは、決して簡単なことではありません。追跡すべきデータポイントが非常に多く、どの指標が自分にとって重要で、どの指標を無視してよいのか判断に迷うことも少なくないでしょう。 この記事では、AppSignalを活用してNGINXを監視し、アプリケーションパフォーマンスの可視性を高める方法を詳しく解説します。 すべてのメトリクスを「マジック」に AppSignalでは、スループットからレスポンスタイムまで、さまざまなパフォーマンスメトリクスを組み合わせたカスタムダッシュボードを作成できます。ただし、手動でダッシュボードを構築するには時間がかかり、どのメトリクス