まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

タグ:lotus

僕のことを個人的に知ってる人はご存知かもしれませんが、自分は今から25年ちょっと前に「ロータス株式会社」という企業でアプリケーション開発を担当していました。具体的に開発を担当していた製品の中には、昭和を代表する(苦笑)表計算ソフト 1-2-3(「ワンツースリー」)も含まれていました。ここ10年くらいはウェブアプリばかり作っていますが、まだ頭(や性格)がキレキレだった頃はパソコン向けのネイティブアプリも作っていた時代がありました。

自分が開発を直接担当していたのは Microsoft Windows 向けの 32bit 版でしたが、当時はまだ PC-DOS 版を無理やり Windows 向けに拡張した 16bit 版や、PC-DOS 版自体も 1995 年まではバージョンアップ対応をしていました。そんなこともあって当時の担当製品は今でも仮想マシン(VM)の形で残していたりします。今となっては貴重な PC-DOS/V(V7) の稼働環境だと思っています:
2022060400


※ついでにコメントしておくと、Lotus Notes バージョン1などの OS/2 資産も VM 化して残しています。自分が作った製品への愛は高めだと自認しています。


この PCDOS VM の中に懐かしいツール類と一緒に Lotus 1-2-3 R2.5J がインストールされています(赤く囲っているのが当時悪名高かったライセンスファイルです):
2022060401


今回、この環境を持ち出したのは理由があります。先日、スラドにこのようなタレコミがあったのを発見しました:
Lotus 1-2-3、Linux に移植される

(自分も 1-2-3 愛は大きい方だと思ってますが)自分も勝てなさそうな 1-2-3 愛を持っていそうな Tavis 氏がインターネット・アーカイブ転がっていた保存されていた SysV 版の 1-2-3 for UNIX を使って Linux 版(elf 版)を作ることに成功した、というものでした。未だに 1-2-3 への愛を持っているのは自分くらいかと思っていたのですが、世界は広いです。 Tavis さん、Good-job! d(o^


(横道)上記画像でファイラーと呼ばれていた FD を使ったスクリーンショットを掲載していますが、実は FD は Linux に移植済みだったりします。興味ある方はこのコマンド(Ubuntu 向け)を試してみてください:
$ sudo apt install fdclone

$ fd
2022060411



(横道おわり)で、そんな記事に触発されたというわけではないのですが、自分も久しぶりに上記 PC-DOS 版 1-2-3 環境を使ってせっかくなので何か試してみようと思いました。実は以前から気になっていたことがあって、それを検証する機会とさせていただきました。

その気になっていたことというのは、みなさんも一度は耳にしたことがあると思うのですが「ソフトウェア製品に実装された機能の多くは使われない」というものです。製品ベンダーとしては利用者からの要望を形にして様々な機能を実装しているのですが、ほとんどのケースでその多くは使われることがない、というものです。そういう自分も、例えばプログラミングエディタに VSCode を使っていますが、自分に必要な機能は当然のように知ってますが、正直知らない機能が多くあります(良く言えば「困ったときにすぐに調べることができるので、使わない間は知らなくてもよい」わけです)。現在、表計算ソフトといえば「エクセル」ですが、このエクセルも(特に最近のバージョンは)非常に多くの機能が付与されていて、噂では方眼紙としても使うことができるその全てを熟知している人って存在するのだろうか??とすら思ってしまうほどです。

エクセルを「最低限」(この定義が難しい)使えるようになるにはどんなことを知っていればいいんだろう?? という需要もあるようで、YouTube を見ていてもエクセルの基本機能を紹介するものが多く見つかります。

・・・と、そこで閃きました。現在のエクセルで「基本」とされている機能って、Lotus 1-2-3 の頃にはどの程度存在していたのだろうか? という命題です。特に他意はないのですが、この手のエクセル基本機能を調べようとググった結果の上位にあったもので、YouTube でエクセルの基本機能等を紹介しているシリーズを見つけ、そのシリーズ中の「【Excel基本】初心者が最初に覚える関数12選」の中で紹介されている12個の関数を基本機能とみなして、これらの関数が DOS 版 Lotus 1-2-3 の中の関数としてどの程度カバーされていたのか、を検証してみることにしました(勝手に使わせていただきました m(__)m):
https://www.youtube.com/watch?v=cfGKFhSE6uA



なお、この動画で紹介されていた関数12選は以下のような内容でした:
1 SUM関数
2 AVERAGE関数
3 COUNT関数
4 COUNTA関数
5 IF関数
6 COUNTIF関数
7 COUNTIFS関数
8 SUMIF関数
9 SUMIFS関数
10 VLOOKUP関数
11 IFERROR関数
12 XLOOKUP関数


比較対象は Windows 版の Lotus 1-2-3 と DOS 版の Lotus 1-2-3 を・・・と考えていたのですが、今回の12個の関数について検証した結果としてはこの2つに差異はありませんでした(Windows 版に存在している関数は DOS 版にも存在していて、Windows 版に存在していない関数は DOS 版にもありませんでした)。ということもあって、以下では DOS 版での検証結果のみを紹介します。


検証方法としては、上記の YouTube 動画で「エクセルの基本関数」として紹介されている機能と互換性のある関数が DOS 版の Lotus 1-2-3 でも存在しているかどうかを確認する、という形としました。なお動画内で対象としているエクセルは最新の 2021 で、私が検証に使ったのは DOS 版 Lotus 1-2-3 R2.5J というバージョンです。このバージョン自体は 1995 年にリリースされた、DOS の日本語対応版としては最終バージョンですが、基本的な設計は R2 から変わっておらず、1986 年の設計を引き継いでいます(つまり昭和時代のソフトウェアです)。


【検証準備】
(VM 内の)PC-DOS に Lotus 1-2-3 R2.5J をインストールし、適当な表を作った上で関数の検証を行います:
2022060402


【検証1 SUM関数】
指定エリア内の数値を合計する、という(本当の意味で基本的な)関数です。これは Lotus 1-2-3 R2.5J では @SUM 関数として実装されていました(下図の赤枠部分参照)。なお Lotus 1-2-3 ではマクロ関数は全て @XXX という形式になっていて、「アット関数」と呼ばれています:
2022060403


【検証2 AVERAGE関数】
指定エリア内の数値の平均値を求める関数です。これも Lotus 1-2-3 R2.5J では @AVG 関数として実装されていました(下図の赤枠部分参照):
2022060404


【検証3 COUNT関数】
指定エリア内に数値のセルがいくつ存在するかをカウントする関数です。これも Lotus 1-2-3 R2.5J では @PURECOUNT 関数として実装されていました(下図の赤枠部分参照)。1-2-3 にも @COUNT 関数は存在しているのですが少し用途が違っていました:
2022060405



【検証4 COUNTA関数】
指定エリア内に空白ではないセルがいくつ存在するかをカウントする関数です。これも Lotus 1-2-3 R2.5J では @COUNT 関数として実装されていました(下図の赤枠部分参照)。1-2-3 の @COUNT 関数はエクセルの COUNTA 関数で、エクセルの COUNT 関数は 1-2-3 の @PURECOUNT 関数として存在しているのですが少し用途が違っていました:
2022060406


【検証5 IF関数】
条件分岐処理をする関数です。これは Lotus 1-2-3 R2.5J でも @IF 関数として実装されていました(下図の赤枠部分参照):
2022060407


【検証6 COUNTIF関数】
指定エリア内に条件を満たすセルの数かいくつ存在するかをカウントする関数です。これは Lotus 1-2-3 R2.5J には互換関数が存在していません


【検証7 COUNTIFS関数】
指定エリア内に複数の条件を満たすセルの数かいくつ存在するかをカウントする関数です。これは Lotus 1-2-3 R2.5J には互換関数が存在していません


【検証8 SUMIF関数】
指定エリア内で条件を満たすセルだけを対象とした SUM 関数です。これは Lotus 1-2-3 R2.5J には互換関数が存在していません


【検証9 SUMIFS関数】
指定エリア内で複数の条件を満たすセルだけを対象とした SUM 関数です。これは Lotus 1-2-3 R2.5J には互換関数が存在していません


【検証10 VLOOKUP 関数】
指定エリア内で特定の値をもつ列を見つけた場合に、指定された別の列の値を求める関数です。これは Lotus 1-2-3 R2.5J でも @VLOOKUP 関数として実装されていました(下図の赤枠部分参照):
2022060409



【検証11 IFERROR 関数】
エラーが発生した場合の処理を指定する関数です。これは Lotus 1-2-3 R2.5J には互換関数はありませんでしたが @IF 関数と @ISERR 関数を組み合わせる形で同様の機能を実装できました(下図の赤枠部分参照):
2022060408


【検証12 XLOOKUP関数】
VLOOKUP 関数の上位互換となる関数です。エラー発生時の処理も関数内に含めることができます。これはエクセル 2021 で登場した新関数でもあり、Lotus 1-2-3 R2.5J には互換関数が存在していません。


【検証結果まとめ】
というわけで、検証結果をまとめるとこのようになりました:
#エクセルの関数1-2-3 の互換関数
1SUM@SUM
2AVERAGE@AVG
3COUNT@PURECOUNT
4COUNTA@COUNT
5IF@IF
6COUNTIF -
7COUNTIFS -
8SUMIF -
9SUMIFS -
10VLOOKUP@VLOOKUP
11IFERROR@IF と @ISERR
12XLOOKUP -


エクセルの基本関数12個のうち、6個は互換関数が(くどいようですが昭和時代の)1-2-3 にも存在していて、1つは他の関数の組み合わせでなんとかなる、という感じでした。「現在の基本」のうちの半分くらいは当時から使えていた、ということになります。1-2-3 は「条件付きで○○をする」という関数が全般的に弱い感じがしますが、逆に言うとそのような需要があってエクセルで実装されていったのだと思われます。特筆したいのは VLOOKUP 関数で、これは今でも中級者以上が比較的使う機会の多い関数だと思っていますが、その関数が 1-2-3 でも実装されていたんですね。オーパーツのような話で、私も少し驚きました。



なお、今回のブログエントリを書く際の参考文書はこちらでした。今となっては貴重品な、ナツメ社のハンドブックシリーズです:
IMG_20220530_080350_947



世のノーツ開発者の興味が XPages に寄っている中で、1世代前の技術情報になることをご容赦ください(苦笑)。

久しぶりに触ったノーツに、久しぶりにプラグインをインストールしようとしてハマりました。何言っても言い訳になることはわかった上で、でもこの業界で1年半のブランクは大きいようです(苦笑)。


ノーツ(IBM Notes) はバージョン8から Eclipse RCP(Rich Client Platform) をベースとしたクライアントに生まれ変わり、Eclipse 向けに提供されているプラグインをノーツにもインストールできるようになりました。そもそも Eclipse は開発環境なので、世に出ているプラグインは開発環境向けのものが多いです。それもあって、プラグインの互換性は100%ではないのですが、Eclipse のプラグイン開発技術やスキルを使ってノーツの機能拡張もできるようになった、というものでした。

Eclipse の場合、プラグインをインストールしようとするとメニューの Help から Install New Software を選んで・・という手順になります:
2015030101


ノーツの場合はその方法からして異なるのですが、実はそれ以前に「そもそもプラグインインストールをメニューに表示するための準備」が必要でした。

それが
 (ノーツをインストールしたディレクトリ)/framework/rcp/plugin_customization.ini ファイルに
 com.ibm.notes.branding/enable.update.ui=true の一行を追加する
というもの。これをしてノーツを再起動すると、メニューの File - Application からインストールができるようになる・・・ はずだったのです。

でも試してみたらこんな感じ。File - Application までは表示されるのですが、その先にインストールの選択肢がありません:
2015030102


あれ?これは何?? と驚きましたが、どうやらノーツのバージョン9からこの部分の仕様が変更されていた模様です。詳しくはこちらの Technote にかかれていましたが、この設定に加えてランタイム設定の com.ibm.notes.branding.prefs ファイルから一行削除する必要がありそうでした:
[ファイル] - [アプリケーション] - [インストール] メニューが plugin_customization.ini ファイルで設定しても表示されない


ここまでの設定をしてノーツを再起動すると、無事にインストールメニューまでが表示されるようになりました:
2015030103


うーん、しばらく離れていて気づきませんでした。いつの間に・・・

この方法で UpdateSite の URL を指定して Eclipse プラグインをインストールすることができます。

またノーツ用の拡張機能を使って Eclipse プラグインを開発することもできますが、その手順の解説がどこかにないかなあ、と探していたら、こんなページを見つけてしまいました。今となっては懐かしくもあり、恥ずかしくもある技術解説ページです:
Lotus Notes 8 プラグインでグラフィックコンテキストを利用する



で、個人的にこんなの(画面右)を作ってたりします:
2015030104

このプラグインはいずれ公開したいとずっと思っていて、でもそれには公開 Domino サーバーが必要で、さてどうしたものか・・・と悩んでいたのですが、最近になって IBM Bluemix を使う方法を思いつきました。いずれ公開しますのでお楽しみに。なお、その際はこのページに書かれた設定も必要になると思うので、その時にまた参照してください。




このページのトップヘ