#0 長い休眠期間 < Viivi Blog < Viiviの小部屋 < 入り口/Entrance


[NOTE]
This article is written ONLY in Japanese.
I hope you can read the contents through one of the surprisingly advanced latest machine translators,
such as Google and DeepL.


#0 長い休眠期間 Viivi は何をしていたのか?

たいへん申し訳ありません.
2012年に Viivi の公開を停止してから, あっという間に 10 年近い時間がすぎてしまいました.
Viivi 公開停止についての経緯を簡単に書かせてください.

公開停止のきっかけ

旧ホームページのトップに書きましたように, きっかけは自宅 PC とホームページサーバとの接続が突然できなくなったことでした.
原因はわかりません.

それに加えて,当時僕はひどい「鬱 (うつ)」状態にありました.
単純に気分が落ち込むというものではありません.
日常生活の中で普通にできていたことが全くできなくなってしまいました.

この2つの理由でプログラムの公開を一時停止せざるを得なくなったわけですが, これらは単なるきっかけにすぎません.

IDE 実装に難航

公開を停止したころから公開再開までの間,Viivi の GUI (Graphical User Interface) 部分である Viivi IDE (およびその機能である VITSE) を実装していました.
この間,言語処理系の本体である Viivi kernel についてはほとんど触っていません.
Viivi IDE の実装に難航したことが, 長期の公開停止をすることになった理由です.

(1) 初期における IDE に対するオブジェクト設計の欠如

公開を止めてしまった後ろめたさと, 小さな例ではない GUI プログラムを書くのはこれが初めてだったため, とにかく動く Viivi IDE の版を早く完成させようと焦(あせ)っていました.

公開を停止したころ,「とりあえず動く版」は既にできており, 基本的な見た目は 00.18.00 版とあまり変わらないものでした.
しかし中身は Swing プログラムの練習コードの寄せ集めのようなものでした.
最初から Viivi IDE のイメージははっきりしていたのですが, それをまとめるオブジェクト設計が全くなかったのです.
なにしろ GUI プログラミングがどのようなものかもわからずに書き始めましたので, 全体を実装するためにはどのような部品が必要で, 全体を動かすのにどのような構造が必要か, などという全体の設計について想像することもできなかったのです.
このことは Viivi kernel を書き始めたときには最初から オブジェクト設計が比較的明確だったことと対照的です.

ひとりの閉じた世界で作業しているせいで, 自分で気づくまでは自分がまちがった道を進んでいることがわかりません.
結局,Viivi IDE 全体の根本的なオブジェクト設計を 何回もやりなおすことになってしまいました.
ことばで書くと簡単ですが,「数か月かけて書いたコード全部を書き直す」 ということを何度もくり返しました.
最初に正しい設計をしてからとりかからないとひどい目にあうという 典型的な悪い例となってしまいました.
今だから言えることですが, もう少し小規模な GUI プログラミングを行って見通しが立つようになってから Viivi IDE を書く余裕があれば, 傷を浅くできていたのかもしれません.
最初の GUI プログラミングの課題として Viivi IDE は少し大きすぎましたが, とても良い勉強にはなりました.

(2) kernel と IDE のコーディングスタイルの違い

もうひとつは Viivi kernel を書くときと Viivi IDE を書くときの手法の違いです.
同じコーディングでも,これら2つの作業は質が全く異なります.

僕にとっては,Viivi kernel を書くのはとても楽しい作業です.
Viivi kernel を書くために必要な Java API は非常に限られています.
記憶容量の乏しい僕でも,よく使うこれら少数の API の仕様はさすがにだいたい覚えています.
少数の熟知した部品の組み合わせを自分で考えればいいだけですから, この作業はそれほどつらいものではありません.

一方,Viivi IDE を書くのは苦痛でしかありません.
GUI 部を担当する Swing プログラミングの場合は上記とは状況が全く異なります.
星の数ほどの部品があり,そのそれぞれに星の数ほどのメソッド群が存在しています.
Viivi IDE で何かの部品を使うことになると, まずその部品の使いかたを調べる必要があります.
Swing API のドキュメントを読むだけで使えるようなものはほとんどありません.
たいていはネット上にある使用例に習って書かないと動きません.
人の情報を探すだけではだめで,その人の考えに自分の考えを沿わさなければ理解できません.
GUI プログラミングに必要なこれらの作業: 情報収集も,他人の考えに自分の考えを合わせるという作業も,僕はとても苦手なのです.
(ちなみに,役所や銀行の書類を書いて一度で通った記憶が僕にはありません.
自慢して書くことじゃないけど.)

その結果,長期にわたる公開停止へ

上のような理由により,Viivi が再公開できる程度になるまで, 非常に長い時間がかかってしまうことになりました.
この間,Viivi IDE はずっと未完成のままでした.
未完成な GUI プログラムは非常に不安定であり, 直感的に操作できるようになってもいません.

まず安定性の話をすると, Java/Swing の GUI 処理は EDT(Event Dispatch Thread) という専用のスレッドで 動かすことが決められています.
したがって必然的に Viivi kernel スレッドと EDT との マルチスレッドプログラミングを行うことが要求されるのですが, ふたつのスレッド間でリソースを奪い合ってしまうと OS も簡単にフリーズしてしまいます.

GUI の直感性についても配慮する必要があることを痛感しました.
たとえばプログラムを一時停止させるタイミングなどについて, プログラムの上で単純な挙動が正しいと思ってコーディングしていても, いざ使ってみると直感的な操作と全く合わない挙動になることがよくあります.
人間の感覚に合わせるためには,案外複雑な実装が必要な場合があることがわかりました.

このように問題が解決されていない未完成の状況が続くと, 再公開のタイミングについての判断がとてもむずかしくなります.
完成度の低いソフトウェアを公開したところで, それが不安定だったり非直感的だったりすれば とてもユーザのみなさんには使ってもらえないだろうということを恐れていました.
「これやると OS が固まるから絶対にしないで」
とか
「これについてはちょっとおかしいけど,今直しているところだから ほかのところだけ使ってみて」
とは言えないのです.
ユーザのみなさんにしてみれば,どこに dead-lock の危険が潜んでいるかとか, 今僕がプログラムのどの部分を修正中だとかいうことにご興味はないでしょうから.

完成をあきらめて再公開

公開した 00.18.00 (alpha) 版も決して満足のできるものではありません.
個人的には kernel/IDE 部とも,9 割程度の仕上がりだと思っています.
言いかたを変えれば,完成させてから公開するのをあきらめたから, ようやく公開できることになりました.
ただ,少なくとも OS をフリーズさせたり,極端におかしな挙動はしないようにはなっていると思います.

本来 alpha 版は開発中の進捗(しんちょく)状況や問題点を開発組織内で共有するためのものですが, Viivi は完全な個人プロジェクトであるために僕にはそのような組織が存在しません.
それでいきなり完成度の低い版をネット上に公開させていただくことにしました.

実際に使っていただければわかると思いますが, ユーザのみなさんにとっては 9 割の完成部分よりも 1 割の未完成/不具合の部分のほうが目立つと思います.
ここからはユーザのみなさんからのフィードバックをいただいて, Viivi を完成させていきたいと考えています.


#0 長い休眠期間 < Viivi Blog < Viiviの小部屋 < 入り口/Entrance


ご連絡方法

2022/03/02 開設
2022/03/12 更新
Copyright(C) 2003-2022 ilma <ilma@viivi.io> All rights reserved.