SHOYAN BLOG

シェルスクリプトで別プロセスの終了ステータスを取得する

シェルスクリプトで別プロセスの終了ステータスを取得するTipを紹介します。

ユースケース

時間のかかる処理などを並列で行い、その実行結果(終了ステータス)を取得したい。

サンプルコード

Bashのサンプルコードです。スクリプトに解説を記入しています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/bin/bash

command1() {
  echo "executing commnad1"
  sleep 3
}

command2() {
  echo "executing commnad2"
  sleep 3
  # エラーとして終了させる
  exit 1
}

echo "start"

# バックグラウンドで実行
command1 &
# $!で直前に実行されたコマンドのプロセスIDを取得し、変数に保存している
pid1=$!

command2 &
pid2=$!

# waitは指定されたプロセスIDの処理が終わるまで待つ
wait $pid1

# $?でwaitで指定しているプロセスの終了ステータスを取得することができる
if [ $? != 0 ]; then
  echo "command1 error"
else
  echo "commnad1 success"
fi

wait $pid2
if [ $? != 0 ]; then
  echo "command2 error"
else
  echo "command2 success"
fi

echo "end"

gistにもコードをアップしています。

shellの学習は次の書籍を1冊やっておけば大丈夫です。

RubyでのWebアプリケーション開発はSinatraから入りRailsに行く

私はソフトウェアエンジニアなのですが、プログラミング講師としても生徒さんにRubyを教えています。RubyでWebアプリケーションを作る場合、まず候補になるフレームワークはRuby on Railsですが、Railsは初学者には難しいと思います。プログラミング初学者にRailsを教えるということは、車の教習所でいきなりスポーツカーを運転させるようなものです。入門者には入門者に適した車があるのと同様にプログラミングにもそのようなものがあります。

では、最初は何がいいかというと、Sinatraがよいと思います。そういうわけで、Sinatraを使ったWebアプリケーションのサンプルを探してみたのですが、よいものが見つかりませんでした。ないなら作ってしまえというわけで作りました。

今回作成したのはシンプルなメモアプリケーションでフォームに入力した値をメモとして保存することができます。作成したメモの一覧表示、詳細表示、編集機能、削除機能を実装しています。基本的なCRUD操作を備えており、RESTについても学ぶことができるようになっています。

わかりやすいようにディレクトリをわけています。initialディレクトリは最初からフルスクラッチで作る場合のディレクトリです。step1はメモの作成とメモの表示機能を実装しています。step2はstep1の機能にメモの削除とメモの編集機能を追加しています。

実装にあたっては、できるだけRubyの標準ライブラリを使うようにしました。理由は長い年月において最も安定的に使えるのはRubyの標準ライブラリであることからです。サードパーティのライブラリは便利ですが、Rubyのバージョンアップによる互換性の問題などを含んでいます。将来的にも安定して動作させることを考慮すると標準ライブラリで実現できる機能であれば標準ライブラリを選択するのは良い選択肢だと思います。

また、データベース(正確にはRDBMS)はややこしいので使っていません。もう少し丁寧に説明すると、今回のアプリケーションはプログラミング初学者の学習に適しているアプリケーションをシンプルな実装(環境も含めて)で作るということを目的として作ったので、その点でRDBMSは適していません。では、どうやってメモを永続的に保持するのかというと、ファイルとして保持しています。この機能の実装には、Rubyの標準ライブラリであるpstoreを利用しました。pstoreとはオブジェクトをそのままファイルとして保存するライブラリです。メモアプリケーションの機能を実現するなら、これで十分なわけです。

Webアプリケーションはリクエストとパラメーター(必要であれば)をアプリケーションサーバーに送信し、ルーティング設定に従ってそのリクエストを処理します。そして、レスポンスを返します。この流れを理解することがはじめの1歩です。この流れが理解できていない状態でRailsを使うのは早すぎるように思いますし、データベースの用意やらマイグレーションやらは確実に最初の壁となってプログラミング初学者に立ちはだかるでしょう。

そのようなややこしいことは置いておいて、まずは小さな動くアプリケーションを作りましょう。Sinatraであればターミナルに数コマンドを打つだけでアプリケーションを起動できます。自分で全てのコードを書いても数時間程度で書くことができます。コードのほとんどは標準のRubyのライブラリを使用しているため、とてもシンプルです。

ここまではRailsについて散々けなしていますが、誤解のないように断っておくと、本格的なWebアプリケーションを作るのであればRailsがいいです。習得に数ヶ月はかかるでしょうが、多くの機能を少ないコードで実装できてしまうRailsの生産性の高さは、それだけの時間をかける価値があります。しかし、プログラミング初学者がいきなりRailsから入るのは難しいのではと思います。RubyでのWebアプリケーション開発は、まずはSinatraから入りそこからRailsに行くのがよいというのが私の考えです。

好きなことをひたすら追いかければよい

この記事は前回の続きです。前回の記事は「計画はいらない」です。

「好きなことをひたすら追いかければよい」理由は、そのほうがうまくいく可能性が高いからです。

世の中には好きなことを極めることで、それが結果的に仕事になっている人がいます。例えばYoutuberのHIKAKINさんはその1人です。HIKAKINさんはヒューマンビートボックスを極め、それを自身の動画投稿に取り入れることにより一躍人気者になりました。

人気が出たのは誰もそのようなことをやっておらず、新鮮だったということがあると思います。ヒューマンビートボックスにハマり、動画投稿にハマり、自身の面白いを追求した結果、トップYoutuberになることができたのです。

このように世の中にないものには、計画を立ててそれを遂行するというやり方では到底到達できません。道はただ1つ。ハマってハマって追求するということです。

自身の面白いはとてつもなく大きな可能性を秘めています。今は何も可能性がないように思えるかもしれません。しかし、その面白いにハマり追求することで当初は見えなかった道が見えてくるはずです。

これは山登りに似ています。山の麓からは山しか見えません。山を登っていくうちにどんどん視界が開けて行きます。上から見ると、今まで見えなかった道が見えることでしょう。遠いと思っていた頂上も実際に歩いてみると、案外登頂できるものです。

実際にやってみると想像していたものと違うということもあることでしょう。その場合はさっとさとやめればいいのです。思い立ったらすぐやって、さっさと飽きて次に行く。飽きるということにネガティブなイメージを抱く人もいるでしょうが、飽きるということは経験し、そこからなにかしら学んだということです。どんどん飽きて、次の新しい経験を積めばよいのです。そのほうがたくさん学ぶことができます。飽きた数こそがあなたが成長した証です。

このように計画を立てずに面白そうなことはどんどんやる。飽きたらまた別の面白いことをやる。そうやって経験を積み、学んでいくことで、結果的にその経験が組み合わさって面白いことができるようになると思うのです。

計画はいらない

2018年もあと3ヶ月で終わろうとしています。少し早いですが、2018年を振り返ってみると、良いことも良くないことも含めて様々なことがありました。結果的に近年で最も濃い1年になりました。

私自身は今年を特別な1年にしようなどとは微塵も考えていませんでした。また、何かを達成しようと詳細な計画をたてたりもしていません。しかし、結果的には今まで経験したことのないことをいくつか経験することができました。

ここで言いたいことは「計画していないけどうまくいった」ということです。

私はこのような経験を積むにつれて、計画を立てるのはあまり意味のないことなのではないか、と考えるようになりました。明確な計画を立て地道に進むというのは一見素晴らしいように思えます。しかし、実際は計画通りにいかないことがほとんどです。もし計画通りにいけば、みんな子供の頃に夢見たスポーツ選手や芸能人になっていることでしょう。

私たちは経験則で人生とは計画通りにいかないことを知っています。しかし、計画を立てようとしがちです。そして、年の暮れには「計画が達成できなかった。自分は無能な人間だ」と自分を蔑みます。そんなことに何の価値があるのでしょうか。ほとんどが失敗する計画をなぜ立てるのでしょうか。

いい加減、そのようなことはやめたほうがいいのではないかと思うわけです。私は「好きなことをひたすら追いかければよい」と思います。

理由についてはまた書いていきたいと思います。

» 好きなことをひたすら追いかければよい

Developers Summit 2018 FUKUOKAに登壇します

2018年9月7日にアクロス福岡で開催される Developers Summit 2018 FUKUOKA(デブサミ福岡)に登壇します。
明日はどのような話しから入ろうかがまだ決まっていなくて、どうしようかと考えています。

発表内容は0からはじまった開発チームが、どのようにチームとしてまとまっていき、アプリケーション開発を成功させることができたかという事例の紹介となります。

デブサミ福岡のような大きなイベントに登壇するのは今回が初めてなので、うまくできるか不安ではありますが、精一杯やりたいと思っています。もし、当日会場に来られる方がいれば是非、お声がけください。