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

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

タグ:64bit

しばらくブログをご無沙汰していました。久しぶりの投稿はスプレッドシートの開発&公開の話です。

エンジニアの皆さんの多くはターミナルや(Windows であれば)コマンドプロンプトといった、いわゆる CLI(Command Line Interface) で操作するツールを普段から使っている人は珍しくないと思います。現に git などは GUI のアプリもありますが、多種多様なオプションを指定して操作しようとすると、必要なオプションを自由に指定できる CLI 版の方が使いやすいと感じます。

私自身は普段は Windows PC を使っていて、ターミナルは WSL を導入した上で Ubuntu のターミナルを開いて操作していることが多いです。このように Linux (おそらく macOS も)を使っている間は多くのツールが CLI で提供されていることもあってあまり不便に感じることはありません。

ただ、これが Windows のコマンドプロンプト(cmd.exe)を使っていると使えるツールの少なさから困ることもあります。比較的最近まではコマンドプロンプト内で使えるテキストエディタがなかったので、テキスト編集のためにいちいちメモ帳(notepad.exe)を起動して編集し、編集し終わったらまたコマンドプロンプトに戻って・・・ といったいかにも面倒な感じで操作してました。Linux なら有名な vi を使えたり、vi が苦手でも nano エディタなどターミナル内で使える多くの選択肢があるのに・・・ ただこの問題は Microsoft が edit という謹製ツールを提供してくれたおかげで解決しました。

そこで残った問題がスプレッドシートでした。エクセルを使う程でもないちょっとした演算が可能な表計算ツールを使いたい時にコマンドプロンプト内で動作するツールの選択肢が(私の知る限り)存在していないのです。ちなみに Linux であれば sc というツールが存在していて、ターミナル内でもこのスプレッドシートを使って計算することができます。

#おまけに言うと Windows の前の DOS 時代には Lotus 1-2-3 という DOS プロンプト内で動作するスプレッドシートがあったのですが、これは 16bit 環境でしか動かないので現在の 64bit Windows では互換モードも用意されていないのでした。。


・・・という背景の中、生成 AI の力を借りつつ苦手な .NET C# プログラミングに挑戦して、64bit Windows のコマンドプロンプト内で動くスプレッドシート・アプリケーションを作ってみました。以下、そのツールを簡単に紹介します。


ツールの名前は Cli SpreadSheet の略で css としています(Cascade StyleSheet ではないです)。css はこちらでソースコード含めて公開しています:
https://github.com/dotnsf/css

ツールのダウンロードは上記ページ内の「インストール」節のリンクから css.exe をダウンロードしてください(このファイル1つだけで動きます)。シンプルなツールですが .NET Runtime を内蔵していることもあって 30MB 以上あります。そして PATH の通ったフォルダにコピーします:
2026040701


起動するにはコマンドプロンプト内で "css" を実行します。パラメータでファイル名を指定(例 "css test.csv")して読み込むことも可能です。このパラメータ例で分かるかもしれませんが、CSV ファイルから読み込んだり、CSV ファイルに出力することが可能です:
2026040703


css が起動すると下図のようにコマンドプロンプト内でスプレッドシートが起動します:
2026040702


青く背景になっている部分がアクティブセルです。矢印キーまたは hjkl キーでアクティブセルを動かすことが可能です。この状態で Enter キーまたは i キーを押すと編集モードに切り替わり、次に Enter キー(確定)または ESC キー(取消)を押すまでアクティブキーの内容を編集できます:
2026040704


SUM, AVERAGE, IF, ・・・といった代表的なエクセル互換関数をサポートしています。詳しくは「関数リファレンスガイド」を参照ください:
2026040705


":" キーを押すと画面がコマンドモードになり、":e ファイル名" で CSV ファイル読み込み、":w" で CSV ファイル書き込み(ファイル名を指定する場合は ":w test.csv")、":width 数値" でアクティブのセルのある列の列幅変更、といった操作が可能です。この辺りは vi キーバインドを参考にしています。

また vi に詳しくない人向けにコマンドモードをメニューから利用できるようにもしています。その場合は "/" キーを押すことでメニューを表示し、ここから選択することでもコマンド実行が可能です(このあたりは Lotus 1-2-3 互換です):
2026040708


終了はコマンドモードから ":q" です。編集中のファイルがある場合はすぐには終了できませんが、編集を破棄して強制終了する場合は ":q!" で終了します。終了後はコマンドプロンプトに戻ります:
2026040707


概ねの使い方は以上です。詳しくは README.md や他のドキュメントを参照ください。


自分が使うことを前提(大事)に、vi キーバインドや Lotus 1-2-3 互換メニューのような機能を実装しました。最低限の関数も実装したおかげもあって、自分的には使いやすいものができたと思ってます。同じようにコマンドプロンプト内のままスプレッドシート機能を使ってみたい人がいたら是非使ってみてください。


ちなみに、このアプリを作る上で IBM Bob という生成 AI を使いました。自分が普段不慣れな言語だったこともありますが、いやあ「すげー便利」ですね。。



小型コンピュータのラズベリーパイ、一般的には Raspbian OS で使われることが多いと思っています(自分も特別な理由がなければ Raspbian OS か、または Raspbian の派生 OS で使います)。

が、Raspbian OS って 32bit OS なんですよね。ラズベリーパイ自体は 64bit CPU である arm64 を搭載していることを考えると、「せっかくなので 64bit で使いたい」ともなるわけです。

ラズベリーパイ上で動く 64bit OS はいくつかあるようです。ただリストを見ると「64bit 機能の一部が動かない」という注釈もあったりして、全てが期待通りの挙動をするかというと、そうでもなさそう・・・

というわけで、ラズベリーパイに 64bit Linux である openSUSE を導入する方法を紹介します。といっても導入だけなら Raspbian OS と特別に違うことはなく、どこからイメージをダウンロードするか、程度の違いですけどね。


ラズベリーパイ向けの openSUSE イメージをダウンロードするには、SuSE のラズベリーパイ用ページを参照します:
2019040202


下にスクロールすると、ダウンロードイメージへのリンクが現れます。いくつか種類がありますが、Tumbleweed(開発版)か Leap(安定版)を選び、デスクトップの種類を選択してイメージをダウンロードします。ちなみに僕は Tumbleweed の E20 image を選びました:
2019040201


後は Raspbian OS と同様でダウンロードしたイメージを展開し、(DDWin などのツールを使って)MicroSD カードに書き込み、そのカードをラズベリーパイに差し込んで起動します。

デフォルトのままであれば ID: root, PW: linux でログインできます:
shot-2019-04-02_23-08-13




Java のアプリ開発をしていて、こんな実行時エラーに遭遇することがあります:
java.lang.UnsatisfiedLinkError: C:\IBM\Notes\nlsxbe.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform


最近は Windows といえば 64bit 版が普通になってきました(よね?)。自分の開発環境も 64bit 版 Windows で、Java 開発環境も(JDK も JRE も Eclipse も)64bit 版を使っています。ここまでは珍しくないと思っています。

しかし開発するアプリケーションによっては外部ライブラリ(JAR ファイル)を指定する必要があり、その JAR ファイルが 32bit のネイティブライブラリを使っていたりするなど、64bit の JDK で 32bit 前提のコードを実行しなければならなくなった場合に上記のようなエラーが発生するのでした。

典型例としては、IBM Notes の Java API を使ったアプリケーション開発が挙げられます。2017/Oct/01 現在、Windows 版の IBM Notes は 32bit 版しか存在していません。Java で IBM Notes の API を実行するには IBM Notes 同梱の Notes.jar 他をインポートして使う必要がありますが、この Notes.jar は 32bit の DLL を参照するため、64bit Java から実行すると上記のエラーが発生します。


エラーの原因が分かったところで、どのように回避すればいいでしょうか? これも解決策としてはシンプルで 32bit Java(JRE) から実行すればよいことになります。32bit JRE をダウンロードして実行してもいいですが、上記のような IBM Notes の JAR を使った場合であれば、IBM Notes が使っている Java をそのまま指定して実行すればよいことになります。

ちとややこしいのが Eclipse のような IDE を使っている場合の指定方法です。まず Java - Installed JREs の中に Standard VM として Notes Java を追加しておく必要があります。Notes Java は(ノーツをインストールしたディレクトリ)/jvm にあるので、このディレクトリを指定して追加します:
2017100101


そして Eclipse の Java プロジェクトの中で JRE System Library として、上記で設定した Notes Java を指定します。これでこのプロジェクト内で作成したアプリを実行する際には Notes Java 内の java.exe が利用されるようになるので、上記のエラーが回避できるようになります:
2017100102



 

このページのトップヘ