ハードウェアからサーバ・アプリまでワンストップで開発

前のエントリでサーバのクラッシュの話をチラと書きました。

その時に全損してしまったものに、弊社で使っている会計システムがあります。しかも、とても悪いタイミングで、決算のためのデータの入力が終わったあたりです。

この辺について書いておきます。

弊社の会計システムは、元々OSSで公開されていた「助太刀」に若干の手を入れたものです。

今となってはどこにどう手を入れたのか思い出すことも出来ませんし、そもそもそのソース自体も失なってしまったので確認ができません。ただ、元々Apache配下で動かすことが前提だったものをLighttpで動かすために手を入れたことは覚えています。

これを1期の途中から使い始め(それまで経理をしてなかった)、クラッシュする直前。つまり14期まで使っていました。

元々PHP Ver 4で書かれていたため、そこまで動かすためにはいろいろ騙し騙しで、途中からはアップグレードの類は不可能だったため、VMに環境を入れて必要な時だけVMを起動するといった運用にしていました。「どこかで何とかしないとなぁ」と思いながら多少手をつけてはみるのですが、バックオフィス系のことにあまり集中した時間が取れるわけでもなく、騙し騙しの状況が進んでいました。それでも、DBを読んで必要な帳票を出すところまでは作ってみていました。実用には使わなかったですけど。

そうしているところに、いきなりのクラッシュです。

これも酷いタイミングで、決算のための伝票入力が完了して「ここでクラッシュでもしたら死ぬな」と思ってDBのバックアップを取って、ディスクの状況を見たら案の定RAID(5)の1DEが死んでいたので、「まぁ再構成したら治るでしょ」と思って再構成をかけたら全損。「DBのバックアップ」どころかシステム全部がディスクの藻屑となりました。まぁ、クラッシュなんてそんなタイミングで起きるものです。

これが5月の連休の間のことで、弊社は3月で決算なので5月末までに決算処理をしなければなりません。

1週間と期限を区切ってディスクの復旧に頑張ってみたのですが、どうもすぐには無理っぽいことが判明して、こっちは諦めました。

それと並行して「次期会計システム」の検討をします。

フリーソフトウェア(OSSに限らず)をいろいろ試してみるのですが、「これ」と言ったものがありません。会計システムなんて伝票を入れてしまいさえすれば、後は「どう分類してどうまとめるか」ということでしかないわけですが、「伝票を入れる」ことについて満足の行くものがありません。「科目コード手打ち」とか嫌ですし、そもそも「科目テーブル」を最初から作るのも面倒ですし。誰かが「GnuCashは零細企業なら企業会計にも使えるよ」とか言ってたのですが、寝言は寝てから言って欲しかったですね。

最近は「クラウド会計システム」が流行りなので、そういったものだと苦労がなくて良いだろうと思っていろいろ試してみたりもしたのですが、近頃は「振替伝票」というのが流行らないのか、そこが前面に出ているサービスがなくて諦めました。どこも「あるにはあるけど裏機能」みたいな感じです。確かに「振替伝票」を書くのは面倒臭いとは思いますが、一度慣れてしまえば悪いものじゃないと思うのですけど。

そんなわけで、満足の行く既製品はないということがわかりました。「高価なシステム」にはあるのかも知れないですが、ちょっとそこまではね。

そうなると、次の選択は「作る」ということになります。

私は簿記とか習ったことがなくて、会計なんてのは自社のことでしかやったことがないわけですが、もう10回以上決算を経験しているので、「自社で必要な範囲」についてはだいたいわかっています。また、一番重要なのは「伝票を入れる」ことであって、そこから後はしょせん帳票であって、そこは税理士に教えてもらいつつ改良して行けば良いと思ってます。なので、割と早々に「いいのがあったらそれ使うけどなかった時のために作り始める」ことにしました。

開発のプラットフォームは、

Node.js + Express + Sequelize + PostgreSQL + Riot.js + Excel.js

です。

実はそれまでこの手のアプリ開発はRailsを使うのが基本でした。最初は今回もそう思ったのですが、これもタイミングが悪いことにRailsはそれまで使っていたVer 5ではなくて6になっていました。そうなると、フロントエンドがとても厄介なことになるのですね。

今回は「科目はコードを打ちたくない」「それに限らず出来るだけリアクティブにしたい」という希望があったので、フロントエンドの開発が重要でした。そうなると、webpackが使えないといけないわけですが、Rails 6でwebpackを使うのは決定版というべきものがないとか、いろいろ面倒臭いことになっていました。なので、Railsで作ることは早々に諦めます。もちろん調べつつやればいいことはわかっているのですが、昨今はRailsについて調べると、「とんでもないこと(婉曲表現)」が書いてあるサイトとか多数検索にひっかかるので、正誤の判断に手間を取られるのが嫌だったということがあります。

これはフロントエンドについても似たようなことがあって、jQueryとかVueといった「ありがち」のフレームワークだと、「検索ノイズ(婉曲表現)」が多くて手に負えなくなることが目に見えていたのと、前エントリの情報共有システムの開発で使っていたということもあって、ちょっとマイナーなRios.jsを使うことにしました。

プラットフォームの選択については成功だったようで、Sequelizeとかも手探り状態だったのですが、検索ノイズに悩まされることもありませんでした。ここで下手に「使い慣れて」いるRails(ActiveRecord)を選択していたら、死んでいたことでしょう。

そんなこんなで、日曜日の夜から作り始めて、次の金曜日の夜にはオンラインで必要な機能は全部実装してしまいました。つまり、

  • 科目テーブルの設定と残高設定
  • 振替伝票の入力と仕訳日記帳
  • 総勘定元帳と補助元帳
  • 残高試算表

のオンライン部分はできてしまいました。もちろん、振替伝票の入力では「科目コードの入力」はしなくて済むように「キーワード検索」となっています。

まぁこれでは「帳票」がないので決算には出来ないということと、税理士と「今回は期日までは諦めよう」という結論になってしまったのですが、とりあえず伝票を入力してオンラインでの諸々の確認は1週間で作ってしまいました。

近頃は若者がハッカソンとかでサクっとプロトタイプとか作ってしまうのを「凄いなぁ」と思って見ていたのですが、やれば案外出来るものですね。

ちなみに、アプリの名前は「Hieronymus」となっています。これは「1週間で全部作る(目標)って、天地創造みたいだな」と思って「天地創造」でググって出て来たWikipediaのページに「Hieronymus Bosch」の絵があったからです。

Wikipediaの「天地創造」のところにある、Hieronymus Boschの「快楽の園(Tuin der lusten)」を閉じた時の扉絵。天地創造の3日目らしい

これで、前から欲しかった「会計APIサーバ」を作ることが出来たので、結果的に良かったことだと思っています。

最近のエントリー

会計システム「Hieronymus」の現状

OrangePi5にZabbixをインストールする

レビュー等の依頼について

オープンソースのノートアプリ「SiYuan」 - CasaOS AppStoreレビュー

お気に入りの色さがし1

創立記念日

現在の営業品目(2)

現在の営業品目(1)

SPDX License Listをデータ化した

Orange Pi5でC3TR-Adapterを試す

CasaOS上で会計システム「Hieronymus」を動かす

会計システム「Hieronymus」v1.0.0 リリースしました

CasaOSでファイル同期アプリSyncthingをセットアップする

第11回 Freshmeat

オープンソースノーコード「Activepieces」でワークフローを作る

RaspberryPiにパーソナルクラウドOS「CasaOS」を導入する

sequelize-cliでdb:migrateすると「SyntaxError: Unexpected token ':'」が出る

LED行燈の試作(2)

CMSの社内向けサービスのリニューアル

LED行燈の試作(1)