みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

サーバーとクライアントで使用する言語の選択

この記事は,みーの個人的な意見であり,各言語には一長一短あることをご理解頂いた上でお読みください.

みーが今まで扱った言語は,Java, Python, C, JavaScript, ActionScript, HSP, UnityScriptなどがありますが.現在はPythonとJavaScriptを多用しています.

Pythonは主にデータ処理を行うために使っています.統計処理や文字列処理が非常に簡単に実行できます.Django を使えばサーバーアプリケーションも作れます(以下データ処理にはサーバー開発も含みます).実行速度も申し分なく,ライブラリが充実しており,クロスプラットフォームで開発できることもよい点です.

しかし,PythonでGUIを扱おうとすると面倒です.QtやwxWidgetsなどGUIライブラリーはたくさんありますが,html, css, JavaScriptが織りなす自由な表現の世界には程遠いです.

JavaScriptはES2015が登場してから実用的になりました.import/export構文のサポート*1によって,モジュール毎に開発できるようになり,表現の幅が広がったように思います.

JavaScriptが便利になったので,より一般的な開発でも利用できないかと検討し,Node.jsを触ってみました.しかし,Node.jsの世界はあまり居心地がよくなかったです.いくつか理由をあげます.

import/export と require/module.exports の混在

node.jsのJavaScriptはES2015と少し中身が異なります.せっかくES2015に準拠して書いたjsファイルをnode.jsで使用しようとしても,

// ES2015 mymodule.js
export default function() {
    ...
}

これをnode.jsで利用するためには,babelでexportをトランスパイルしてから,

// node.js
const m = require('mymodule').default

と読み込む必要があります.トランスパイルはありがたい機能ですが,やはり面倒です.

getBBox()がない

JavaScriptでSVGをレンダリングするときにnode.jsはDOMを扱えてもSVGElementのgetBBox()までは扱えません.結局はブラウザーではないので,JavaScriptが得意な描写機能を十分に使えないように思います.

結局,node.jsはJavaScriptの世界ですが,ブラウザーの世界ではないのです.

世の中では, universal javascriptでサーバーでもクライアントでもJavaScriptなのだという流派もあるようですが,開発を行うためにはある程度はサーバーのJavaScriptとクライアントのJavaScriptを区別する必要が出てきます.それならば,新たにJavaScriptでデータ処理を勉強するよりも,すでに慣れているPythonで十分で,GUI用にJavaScriptを使えばよいという結論に至りました.

というわけで,しばらくはデータ処理にPython,GUI用にJavaScriptを多用していきたいと思います.

プログラミング言語ランキングでPythonが2018年も1位になったというニュース*2があります.みーが以前から便利だと思って使っていた言語が,世の中でも支持されているのは嬉しいことです.