「PythonとJavaScript、どっちを使うべきだろうか」と、初心者の方は思うかもしれません。
が、その問い自体が間違いです。
PythonとJavaScriptは役割が違います。結論から言うと、どちらも使うべきです。ということは、初学者はどちらも学ぶ必要があるということです。
この記事では、PythonとJavaScriptの役割分担について書いていきます。
フロントエンドとバックエンド
JavaScriptはフロントエンドの言語(Node.jsという例外はありますが)で、Pythonはバックエンドの言語です。
フロントエンドとは、Webシステムを例にとると、Webサーバーで動くのではなく、Webサーバーからブラウザに送られてきて、ブラウザ内で動くものです。表示を調整したり、あるいはページネーションと言ってページを切り替えたり(ページを切り替えるたびにWebサーバーにアクセスしては通信コストがかかりますよね)、スクロールを担ったりするものです。
バックエンドとは、これもまたWebシステムを例にとると、Webサーバーの中で動作して、ブラウザに送るデータを決定するものです。
広い意味で言うと、通信を必要としない業務システムでも、裏で動く仕組みはバックエンド、表で表示を整えている仕組みはフロントエンドです。ただし大抵の場合どちらも同一の言語で開発しますが。
ただし、この区別は厳密なものではありません。裏と表は互いに通信しあう必要性があり、また、その境界はけっこうあいまいとしています。もちろんこのときはこちらに任せるという一定の事柄は決まっているので(広い意味でのデザインパターン)、次項で解説します。
JavaScriptを使った方がいいとき
Webシステムなら、一つのWebページでデータは決まっていて、あとはブラウザでの表示に密に関わる事柄だけなら、その表示の調整はJavaScriptに任せるべきです。
JavaScriptにはWebページの表示を調整する様々な仕組みが備わっています。表示の調整と言っても、一見裏に隠れているものを実はWebページで保持していた、ということが往々にしてあり、そういうデータの保持の仕方も得意です。いちいちサーバーが関与するまでもない処理はJavaScriptに任せてしまいましょう。
また、JavaScriptでないとどうしてもできない処理もあります。そういうときはJavaScriptを使いましょう。何もかもバックエンドのPythonで処理するのが必ずしも効率的とは限りません。
PythonとJavaScriptの連携例
ここでは、PythonとJavaScriptの連携例を2つ挙げます。
DjangoでPythonからJavaScriptに値を渡す
DjangoにはHTMLテンプレートに値を渡す機構が備わっています。
以下はDjangoのHTMLテンプレート内のJavaScriptコードの一例です。新規メッセージをページに追加するコードです。
statusは”guest”か”host”、host_nameはホストの名前が渡されています。dataは、今きたメッセージです。ゲストからのメッセージであればguest_nameにゲストの名前が入っています。
n = document.createElement("div"); date = new Date(); h = date.getHours(); m = date.getMinutes(); n.innerHTML = "" + String(h) + ":" + String(m) + " " + {% if status == "guest" %}'{{host_name}}'{% else %}data.guest_name{% endif %} + " " + data.message + "
“; $(‘#data’).append(n);
n.innerHTML =
の行で、statusを調べてブラウザに渡すJavaScriptのコードを変えているわけです。
statusがguestの場合、以下のJavaScriptコードとなります。{{}}はやはりDjangoから渡された変数で、実際には、この状態から更に展開されて純粋なJavaScriptのコードとなってブラウザに渡ります。
n.innerHTML = "" + String(h) + ":" + String(m) + " " + '{{host_name}}' + " " + data.message + "
“;
statusがhostの場合、以下のJavaScriptコードとなります。
n.innerHTML = "" + String(h) + ":" + String(m) + " " + data.guest_name + " " + data.message + "
“;
こう書くと分かりやすいのではないでしょうか。名前を変えたいので、DjangoのHTMLテンプレートの条件分岐の構文を使って書き分けているわけです。
実際のWebシステムでは、このように、ブラウザに渡すJavaScriptのコードそのものを変えたいということがよく起こります。Djangoから渡された変数を渡したい場合もそうです。その変数はそのままではJavaScriptのコードとして認識されないのですから。このとき、DjangoからJavaScriptに値を渡します。
ただし注意しなければならないのは、Djangoから渡された変数を展開する場合、HTMLテンプレートファイル内にJavaScriptコードを記述しなければならない点です。staticに入れたJavaScriptコードではうまく展開されません。これはDjangoの仕様です。
SeleniumでJavaScriptコードを実行する
Seleniumで動かすシステムを組んでいて、特定のJavaScriptコードを動作させたいときがたまにあります。
そのときは、
from selenium import webdriver driver = webdriver.Firefox() driver.execute_script('alert("テスト");')
のようなコードでJavaScriptコードを記述できます。
excevute_scriptの()内はJavaScriptであればなんでも記述可能です。ただし、対象WebページのJavaScriptコードで保持している変数は引き継げません。うまく動作しません。
正直言って筆者は使用したことがないですが、方法としてJavaScriptコードを実行する方法もある、というのは知っておいて損ではありません。
まとめ
この記事ではPythonとJavaScriptの関係について書き、また、PythonとJavaScriptの連携の実際について見てみました。
初めにも触れた通り、PythonとJavaScriptはどちらかが必要というものではありません。フロントエンドとバックエンドという風に役割が違い、どちらも必要です。
最近はフロントエンドエンジニアとバックエンドエンジニアは役割分担がされています。しかし、この記事でのサンプルコードにあるように、ときに密接に連携しなければなりません。どちらも知っていないと、連携することは不可能です。Pythonエンジニアを目指す方は、JavaScriptにも取り組んでいきましょう。