当ブログサイトでは、筆者のプログラミング学習の内容を記事化したコンテンツが多いです。
では、学習とは別に、実際どのような使い方を、どの言語で行っているのかを、
今回はまとめてみたいと思います。
コンソールアプリ
■ 一時的なバッチ処理(使い捨て)
PowerShell
-
ファイル整理
-
ログの集計
-
フォルダ構成の一括変更
-
一度きりの変換処理
この手の用途では、PowerShellが楽です。
-
環境構築不要
-
Windows標準搭載
-
パイプラインが強力
「あとで捨てる」前提なら、
可読性や設計より速さと手軽さを優先します。
お勧め度:★☆☆☆☆
パイプラインでオブジェクトを流すのは非常に癖が強い。基本.NETなので大概のことが出来るが、凝ったことをするなら素直にC#を使う方が良い。あと動作が遅いです。
■ 恒久的な処理
C#(コンソールプロジェクト)
-
長期間使うツール
-
定期実行する処理
-
ログ出力・設定管理が必要なもの
この領域ではC#を選びます。
-
型安全
-
デバッグしやすい
-
単体exe化しやすい
-
長期保守が楽
PowerShellは便利ですが、
規模が大きくなると破綻しやすい。
「何年後に見ても理解できる」ことを考えると、
C#コンソールは非常にバランスが良いと感じています。
お勧め度:★★★☆☆
C#でのCUIアプリ開発は、良くも悪くも極めて普通といった印象です。
パフォーマンス面ではネイティブバイナリには敵わないと思いますが、
実用上、不満を感じる場面はほとんどありません。
■ LinuxやOpenCVなどを使いたい場合
Python
-
OpenCV
-
NumPy
-
画像処理
-
AI系ライブラリ
この分野は、もはやPython一択です。
Windowsネイティブというより、
-
WSL
-
Linux環境
-
仮想環境
と組み合わせて使うことが多くなります。
C#でも不可能ではありませんが、
ライブラリ資産の差が圧倒的です。
「既に世界がPythonで出来ている分野」は、
素直に流れに乗った方が楽です。
お勧め度:★★★★☆
OpenCVと書きましたが、正確には
OpenCVと組み合わせて使う NumPy の存在が、Pythonならではの強みだと感じています。
NumPyは行列演算ライブラリですが、
画像の畳み込み演算を DSL(ドメイン特化言語)的に非常に簡潔に表現できる点は、
他に類を見ない便利さだと思います。
Pythonに対する個人的な印象は、バージョンアップで作ったスクリプトが動かなくなる印象が強く、使い捨てで作る分には良いが、恒久的に使う物ではない感じがします。
GUIアプリ
■ 恒久的なユーティリティ・ツール類
C#(WPF / WinForms)
ここが私の主戦場です。
-
ファイル管理ツール
-
画像ビューア
-
ランチャー
-
補助ユーティリティ
Windowsで使う以上、
-
Windows標準UI
-
OSとの親和性
-
exe配布の容易さ
これらを考えると、
WPF・WinFormsは今でも非常に優秀です。
特にWPFは、
-
表現力が高い
-
XAMLで構造が見える
-
コードビハインドでも十分戦える
個人開発との相性がとても良いと感じています。
お勧め度:★★★☆☆
頻繁に扱っており学習も続けていますが、
WPFやWinFormsといった比較的古いフレームワークを
使わざるを得ない点が評価を下げています。
安定性や実用性は高いものの、
新規開発向けの選択肢としては
やや時代を感じる部分があるのも事実です。
■ Linuxの場合
Qt + C++(未作成)
将来的な選択肢としては考えていますが、
現時点では未着手です。
理由としては、
-
個人用途のほぼすべてがWindows上で完結している
ためです。
クロスプラットフォームを狙うならQtは有力ですが、
「作りたいものが無い限り無理に触らない」
というスタンスでいます。
お勧め度:★★★★☆
Web UI とは異なり、
Qt はネイティブバイナリによるマルチプラットフォーム開発が可能なフレームワークです。
Linux をはじめ、Windows(おそらく macOS も含め)、
同一のソースコードから各プラットフォーム向けにデプロイできる点は
大きな魅力だと感じています。
Qt は守備範囲が非常に広く、
個人的には .NET に並ぶレベルの機能を一通り提供してくれるフレームワークだと感じています。
C++ の標準ライブラリを中心に開発するよりも、
Qt を前提としたプログラミングの方が、
個人開発という観点ではコストパフォーマンスが高そうだと感じています。
マクロ用途
■ Googleサービス連携
GAS(Google Apps Script)
JavaScript
-
スプレッドシート自動化
-
フォーム連携
-
メール通知
この分野はGASが圧倒的に便利です。
-
サーバー不要
-
認証不要
-
Google製品との親和性が異常に高い
JavaScript自体が好きかどうかは別として、
「書かざるを得ない場面」では迷わず使います。
お勧め度:★★★★☆
JavaScript 自体の評価というよりも、
GAS が提供している実行環境と機能面の評価が高いです。
個人で使うことを想定すると、
現時点では最良のサービスだと個人的には思います。
■ GIMP拡張
Python(Python-Fu)
GIMP 3系ではPythonが正式な拡張言語です。
-
選択範囲操作
-
画像一括変換
-
作業自動化
GUI操作をそのままスクリプト化できるため、
画像処理系では非常に相性が良いです。
ここでも「ライブラリ資産の強さ」は正義です。
お勧め度:★★☆☆☆
GIMP の Python-Fu は、
一般的な Python と比べると利用できるライブラリがかなり限定されます。
ピクセルを直接扱う処理では速度面の制約が大きく、
実用的なフィルターを作るには厳しい場面が多いと感じています。
スマホ開発
ほぼやりません。
理由としては、
-
端末ごとの差異が大きい
-
OSアップデートが早い
-
保守コストが高い
個人開発との相性があまり良くありません。
もしやるとしたら、
-
Flutter + Firebase
-
言語は Dart
この構成になると思います。
クロスプラットフォーム前提でなければ、
個人が継続して保守するのは厳しいと感じています。
Web開発
これもほぼやりません。
-
個人でWebサーバーを立てる必要性が薄い
-
セキュリティ管理が重い
-
Web UIの知識がほぼ無い
というのが正直なところです。
Web技術は非常に重要ですが、
-
個人用途
-
ローカルツール
-
オフライン完結
という目的には、必須ではありません。
「何でもWebで作る」時代ではありますが、
何でもWebにする必要は無いとも感じています。
AI(Google Colab / Python)
機械学習 AI を学ぶ目的であれば、評価は高い分野なのかもしれません。
ただし、正直なところ、私にとってはあまり「楽しい」と感じる分野ではありません。
そもそも理屈を十分に理解できていないものを実装しても、
どこか 「コレジャナイ感」 が強く残ってしまいます。
Colabは既存リポジトリをそのまま実行でき、
GPU リソースを無料で借りられる点は非常に魅力的です。
一方で、本格的に利用するとなると有償プランが必要になり、
長時間の学習処理では高額になるケースもあります。
そのため、AI を主軸として使うかどうかは別としても、
言語としての Python はある程度理解しておいた方が良さそう
というのが現時点での結論です。
まとめ
ライブラリや情報量の多さを考えると、
React や Node.js などのフレームワークを学ぶべきなのかもしれません。
ただ、個人的にはどうしても 少し遠いテクノロジに感じてしまいます。
言語そのものとしては Go 言語や Rust に魅力を感じていますが、
実際に作りたいものがライブラリ依存である以上、
学習の優先順位はどうしても低くなりがちです。
個人のプログラミングということもあり、
気の向くまま興味のある分野を学習しつつ、
必要に迫られたときには、
最短で問題を解決できるツールとして言語を選択している、
というのが実際のところです。


コメント