見出し画像

おめぇのぺぇそん、すっげぇなぁ(第1回) - オラのWSHとどっちがすげぇべか?

こんにちは!なるーらぼです。梅雨と言っても、もうすこし適度に降ってほしいですね。
今回から何回かにわたって、Pythonとふれあってみたいと思います!PythonといえばAIがどうとか統計や金融がどうとかいうのがウェブ検索でヒットします。興味はあるけどメリットがあるんだろうか?と、やや引いて見ていらっしゃる方も多いのではないでしょうか。
ここではPythonの魅力にはフォーカスせず、どんなもんなんだろうということをざっくりと眺める投稿としていきたいと思います。
興味がわいた方はさらにウェブ検索していってみてください!

<作文>わたしとぺぇそん

わたしとPythonとの出会いは、そこそこつらいものでした。
いまから10年くらい前、当時のわたしはちょっとしたスクリプトというとWSHかrubyをつかっていました。WSHはもともと使っていて、rubyは流行していたということと、JRubyというJavaランタイムで動作する処理系があったからです。
わたしのお仕事では主にLinuxサーバをつかっていたので、WSHはつかうことができませんでした(WはWindowsの略)。そこでサーバ上ではJRuby一辺倒だったのですが、当時のJRubyは起動がスクリプト実行としては致命的な遅さでした。

そこでシェル系のものを駆使していたのですが、どうしても作成スピードと処理スピードの両立が難しく困っていました。

そこへ思い出したのが、むかしからあるPythonでした。
PythonはたいていのLinuxサーバに標準でインストールされていて、しかもそこそこ痒い所に手が届くやつでした。残念ながらデータベース接続が必要になったりするとモジュールの導入が必要でJRuby一択だったのですが、そこ以外はPythonさまさまでした。

そういった経緯で、わたしはPythonをつかうようになったのでした。おわり。

WSHと比較しよう

さて、最初から突っ込みが入りそうです。気にせず続けます…どこを比較するんだ?というところからはじまって、全然違うじゃねぇか!というお怒りの声も聞こえてきそうです。

WSHは「WSHがお好きでしょ?」で投稿しているとおり、Windowsを管理するために誕生した、Windows専用のスクリプト環境です。一方、Pythonはクロスプラットフォームで動作します。WSHでならできたのに、がPythonでもできるとWindows以外でどうにかしたいときにはうれしいのではないでしょうか?わたしはここがうれしいところでした。

pythonで特徴的なこととして最初に挙げられるのが「インデント」でしょう。インデントは作文というか文章でいうところの字下げです。字下げしたところをひと固まりとして読み取ってくれます。

Hello, Worldくらいのものだとほぼ差が出ませんので、次のようなもので比較してみます。

<要求>1から40までの数値で3の倍数のときは「いやーん」、5の倍数のときは「ぐあー」、それ以外は「おっす」と出力する関数

WSHからは代表してVBScript選手に登場いただきましょう。だいたいマクロみたいなものです。

Function Goku()
   For Index = 1 To 40
       If index Mod 3 = 0 Then
           WScript.Echo "いやーん"
       ElseIf index Mod 5 = 0 Then
           WScript.Echo "ぐあー"
       Else
           WScript.Echo "おっす"
       End If
   Next
End Function

次にPython選手です。

def goku():
   for index in range(1, 41):
       if index % 3 == 0:
           print("いやーん")
       elif index % 5 == 0:
           print("ぐあー")
       else:
           print("おっす")

ちょっとだけシンプルになっていることがおわかりでしょうか…?では次はもう少し差が出そうなファイル入出力にしてみます!まずはVBScript選手です

Function Goku(path)
   Dim fso, ts
   Set fso = CreateObject("Scripting.FileSystemObject")
   If Not fso.FileExists(path) Then
       Set fso = Nothing
       Exit Function
   End If
   Set ts = fso.OpenTextFile(path)
   Do Until ts.AtEndOfStream
       WScript.Echo ts.ReadLine
   Loop
   ts.Close
   Set ts = Nothing
   Set fso = Nothing
End Function

つぎにPython選手です

def goku(file_path):
   from os import path
   if not path.exists(file_path):
       return
   with open(file_path, encoding='utf-8') as contents:
       for line in contents:
           print(line.strip())

急激に短くなりますね。そして直感的といいますか、召喚魔法の詠唱を覚えていなくても大丈夫なくらいです。このようにWSHよりはシンプルにスクリプトを書くことができます!

今回のぺぇそん

今回はWSHと比較しつつ、Pythonはシンプルに短く書くことができそうなやつなんだな、ということがわかっていただけたらうれしいです!正直、このくらいのスクリプトであればWSHとPythonでほとんど処理所用時間も変わらないです。それに、実はPythonでもWSHと同じようにCreateObjectすることもできるので、ほとんど変わらない内容にすることもできます。ですから、WSHでふだんの操作や自分のやるべきタスクが自動化できているというように必要なことができているならPythonを無理に学習する必要はないでしょう。
「じゃあ、なぜWSHと比較したんだよ!」と思うかもしれません。正直言って意味があるわけではありません。どちらを好むか?このあたりは趣味の世界になると思います。しかしWSHで困っている方は選択肢のひとつとしてPythonを考えてみてもいいと思います!たとえば次のようなことです。
・文字コードがUTF-8のファイルの読み書きが大量にある
・WSHには用意されていない便利なライブラリを使いたい
・Windows以外でもほぼ同じようにスクリプトを使いたい
・別のスクリプトファイルを気軽に読み込んで使いたい

もちろんこういうところも「WSHでできるよ」ということもあるでしょうが、何が求められるかで選ぶとよいでしょう。わたしは殴り書きしないといけないようなときにPythonを使っています!それでは今回はこのあたりで!

この記事が気に入ったらサポートをしてみませんか?