シェルスクリプトのかわりにGoで書くようになるまで(その1)


シェルスクリプトを書くというのはシンプルで枯れた方法ではありますが、実際には、シンプル「である」ことよりも(そうすべきではないのに)シンプルに「してしまっている」場合が結構あります。

たとえばこんな例。

#!/bin/bash mysqldump databasename > dump.sql

しかしこのままではmysqldumpが失敗した時にdump.sqlが空になってしまいますし、もしそうなった場合にそれを知る方法もありません。 現実問題として、もう少し細かい想定と対処が必須であるわけです。 たとえば ・既存バックアップのバックアップ ・上書き前の結果検証 ・ロールバック ・ログ記録 ・問題発生時のアラート発報 ・ユニットテストなど など。

一方、プログラムを書く場合というのは、こうしたレベルの処理を書くのはごく普通のことです。 言語やフレームワークによって、こうしたことを確実かつ安全に実行させるために、年月をかけて議論し対策を出してきたということだと思うのですね。 しかも、世の中にはアプリケーションやライブラリが多々あるわけですし、自分書くとしても、処理を分割してそれぞれモジュールを書けば良いわけで、毎回一から自分で書く必要もありません。

実はシェルスクリプトでも上記のような要件を押さえて書くことは可能ですので、シェルスクリプト自体がダメだということは無いのです。 ただ、シェルスクリプトで書いたとしても、プログラム言語で書くのと同じようなコード量になるでしょう。 であればプログラム言語で書けばいいじゃん!という結論になったわけです。

最新記事

すべて表示

SQLite(sqlite3)で “no such table”

小ネタです。 SQLiteを使っていて "no such table" とエラーが出た場合、 DBファイル名の指定が空になっている、という凡ミスを起こしていないかを確認してみましょう。 ・・・ そういう凡ミスをしてしばし悩んだので… ファイル名の指定が空になっている場合、一時的なインメモリDBとして保存されます(※1)。 つまりDB接続を切断すると中身は消えます。 なので接続

アプリケーションサーバにポートを指定せずに起動すると?

最近、 Goで書かれたアプリケーションサーバが起動しない! ->原因: .env ファイルが欠けていた というドタバタがありました。 結局Goと関係ないですが、この時、 「あまりGoに慣れてないのでGoの問題かと…」「DockerまだよくわかってなくてDockerの問題かと…」 というような声があったのて、あえてGoで検証してみようと思ったわけです。 さて、Goでサーバサイドのシステムを作

GitLab 9.1.2 (MySQL) を 11.4.0 (PostgreSQL) にアップグレード

弊社ではかなり前からGitLab(CE)を自社環境で運用しているのですが、ふと気付くと、バージョンがだいぶ先に行ってしまっていました。 とくに最近のバージョンでは Auto DevOps なども使えるようになっていたりするので、さすがにそろそろキャッチアップしたいと考えたわけです。 現行の環境は次の通りです: GitLab 9.1.2 sameersbn/gitlab 使用 MySQL 5.6