言語の歴史は人類の歴史。そして人類はコンピュータを言語で動かすようになった。

そろそろバッチファイルはやめてくれないか

»

もう平成が終わるというのに、未だにWindowsでbatファイルやVBSでオペレーションしている人がいる。こういう言い方をすると、「新しければいいという訳じゃない!」と言われそうです。以前、VBAに関するコラムを書いた時にもそういう意見を多く頂きました。古いかどうかより、IEのように妥協で保守されているものを使い続けるのを否定したいです。

新しいものにキャッチアップするにも技術は必要ですが、古いものを使い続けるにも技術は要ります。「いままで動いた実績がある」と主張する方もいるでしょうが、これからを乗り切る対策はありません。今まで動いていたとしても、メンテナンス性や汎用性は担保できません。そもそも、メンテナンス性や汎用性が高ければ、円滑に新しい技術をベースとしたものに移行できます。

インフラエンジニアをやっていて一番コストがかかると思うのは、レガシーへの対応です。レガシーの対応といっても、システムだけではなく人も含めてです。過去の成功の固執する人、新しい事を覚える気が無い人などがそれにあたります。そういう人は、確かに間違えたことは言いません。下手に説明がついてしまうのでタチが悪いです。結果として、技術負債をその場の理屈で持ち越してしまいます。

実際、バッチでもいろいろできてしまいます。systeminfoを一発叩けば、情報だけならいろいろ取れます。しかし、それ以上のことはできません。Unix系のシェルのように、パイプを通して後続処理に繋げられるような構造になっていません。どちらかと言えば、レガシーかどうかというより、明らかに性能として劣るものだから使って欲しくないです。バッチでしかできないことはどんどん減っているので、今更使う理由はありません。

バッチの性能が劣るのが嫌なのもそうですが、レガシーを使用し続けることへのコスト計算ができない人への憤りというのが大きいです。現代社会では、古いものを維持したり、古いものに合わせるのにも労力やお金が膨大にかかります。そういうコストを認識せずに「今までの実績があるからコレが正しい」と言われても、殺意しか沸きません。大人気がないとは思いますが、バッチファイルを撲滅したいと思うのにそういう理由もあります。

Comment(11)

コメント

NANANA

リプレース案件とかで新規に追加したり動かないのを動くようにするためにワチャワチャ気色の悪い処理を追加するのはよろしくないけど
変更の必要がないならそのままで良いと思うんですよね

名無し

レガシーなものには保守がコストがかかるから使わないでほしいというのは全くもっておっしゃる通り、同意のかぎりですが、batをそれの引き合いに出すのは違和感がありますね。


保守コストという観点は、前方/後方互換がない場合に顕著になるかと思いますが、cmd.exeの場合、windowsのosバージョンにか変わらず利用できるかと思います。コマンドラインに関してはWindows ディレクトリに任意のexeをぶちこめばよいだけですし、それにパイプも癖は有りますが使えると思います。cmd.exeの記述方法に癖があるから。。。という話であれば確かにそれはそうですが、そもそもPowershellやPython、Java、Bshell、C、Goなどそれぞれ独自の記述ルールが存在するのでcmd.exeだけ仲間はずれにするのはちょっと違う気もします。Cなんて変態の極みでしょう。Windows ならPowershellかPython使えって話かもしれないですが、psファイルの実行には別途権限を付与しないといけないですし、何かタスクでpsファイルを実行したい場合、一旦batかませてps起動したりしませんかね?これは私が他のやり方を知らないだけかもしれませんが。。。あとは、インフラエンジニアやってるとお客さん環境にツールがインストールされていない/インストールできないことがよくあるので、そういった場合最初から入っているツールだけでなんとかこなすというシチュエーションは日常茶飯事かと思います。


そういった意味でもcmd.exeは保守コストはあまり関係ないし、機能が劣るという点はまあそうですが、プログラミング言語ごとに用途は異なりますし、ちょっと記事で上げられている理由だけでは「cmd.exeやめろ」とは言いがたいのではないのかなと思います。

渡辺啓市

今まさに体験していますが、理解する気皆無の上の人間の独断でPwerShell禁止にされてしまい、無駄に工数を増やしております。

iso

能力が明らかに劣ってる、要求仕様を明らかに満たしてない技術を使うのはナンセンス、確かに。


周りを見回しても少数しかまだ使われてない、実戦証明もろくに貯まってない最新技術を導入して、導入した当人が辞めてしまったら誰もメンテナンスできない、これもナンセンスじゃないですか?


レガシーと言っても古さにピンきりがあり、適度に古い技術というのは使える人が沢山居るということで、レガシーなら何でもコストがかかるというものでもないと思います。


例えば端末の仮想化なんて導入され始めて何年も経っておりメンテナンス性も汎用性も非常に高いと思いますが、さて、それ中小企業の何割に導入されていると思います?


少なくともウチの業界では、仮想化している事自体が話題になるという周回遅れっぷりですw


だって導入しても一人情シスがだれもキャッチアップできないんですもの、当然ですね。


業界によってはバッチファイルガーVBSガーって声を上げても当然のスキルの高さがあることもあるでしょうけど、ITインフラを導入するあらゆる業界から見たら、そうでもないんじゃないかと思いますよ、新技術をキャッチアップできないロートルインフラエンジニアとしてはw

s.yama

大丈夫ですよ。結局困るのはご本人たちです。
残念ですが淘汰されるべきエンジニアってことになってしまいます。

仲澤@失業者

DOSの頃はパイプ機能といっても使うのはsortくらいでした。>command.com
結果をファイルにリダイレクトして、それをまたバッチに編集して・・云々(とほい目)。


最近でも、どうしようもない時はしかたなくPowerShell使います。
結構高機能らしいですが、あんまり詳しくないのでバッチ的使い方しかできませんけどね。

Horus

> NANANA さん
気色の悪いものを追加されるのもそうですが、現行踏襲で設計手抜きも勘弁して頂きたいです。そのままというも理屈ではありだと思います。しかし実際は、周りが変化しているのでそのままではなく退化です。それを認識した上で運用するのならいいかと思います。


> 名無し さん
バッチは明確に時代に取り残されてます。機能で考えてもUnix系のシェルと比較すれば一目瞭然です。bat はシステムでなく、生産性ががた落ちなので人にお金がかかります。


確かに、cmd自体の性能の劣化というより、他が機能をブラッシュアップしているので、相対的に大きく劣化したというのが正しいでしょう。20年前の要求には応えられたかもしれませんが、現代の要求に応えるだけの機能はありません。


batファイルを書き続けることは、コボルで新規システムを構築するのと同様だと考えています。


> 渡辺啓市 さん
お気持ちお察しいたします。


> iso さん
> 能力が明らかに劣ってる、要求仕様を明らかに満たしてない技術を使うのはナンセンス、確かに。


コレにつきます。


> レガシーと言っても古さにピンきりがあり、
これ以下のお話については、すごく「古いもの」という条件でコラムを書いています。前提の条件が大きく違うので、コラムのコメントというより、人に訴えたいご自身の意見と受け取っています。それはいいのですが、


> 新技術をキャッチアップできないロートルインフラエンジニアとしてはw


誰を笑っているのか理解できません。コラムとは別の話題で意見を書かれているので、どなたか第三者に向けてのものかと思いますが。いかんともコメントがし難いです。


> s.yama さん
ご指摘の通りだと思います。淘汰される対象に殺意をいだくより、自分の技術を冷静にみつめていきたいと思います。


> 仲澤@失業者 さん
個人的な感想ですが、Dos系のコマンドは単体で全部済まそうというコンセプトだったように思えます。なので、あまり他のコマンドとの連携を考慮にいれていいなかったように見えます。


そういった反省点を活かして作ったPowerrshellを作ったところが、Microsoftの評価すべきところだと感じています。

もっさん

Windowsのコマンドプロンプトでパイプ使えるの知らない人けっこういるんですね。
dir | more なんてやれば、moreに渡せますよ。
まあ、コマンドは少ないけど、grep.exeみたいなUnixのコマンドを移植したバイナリもあるしね。マイクロソフト純正のUnixコマンドとかもあって、オプションでインストールできるよ

自分は古い技術も新しい技術も両方おいかけていて、都度使い分けって感じかな。

もっさん

ネタ扱いされるかもしれないけど、MS-DOSはUnixをお手本に作られているから、パイプが使えたり、Unix互換のサービスコールが残されていたりします。意外ですね。その流れがposix.exeだとか連綿と続いて、今日のWSL(Windows Subsystem for Linux)にたどり着くのです。Windowsでシェルスクリプト使えるようになって嬉しいおっさんでした。

Horus

> もっさん
率直なところを言うと、機能として貧弱過ぎてWHSの時代からcmdを避けていました。パイプを使えたとしても、パイプに通しても仕方のないような出力しかされないので、cmdは使っていませんでした。


確かに、Unix系のコマンドの移植みたいなものはありましたが、それを使うならCygwinを使います。そもそも、そういうツールをサーバで使うというのも御法度でした。歴史にすら興味が沸かないレベルでcmdを疎んでいます。


機能的制限で実現はしないとは思いますが、cmdを廃止してWSLをメインにして欲しいくらいです。

加納

最近Windows上で作らないですが、、cmd.exeとVBS、場合によっては今でも使うと思います。
使う場合は「小さい」ときでしょうか。そして「インストール」しなくていい。そのためにインストールしてメンテとしてバージョンアップの手順を書いて、、などとするよりは標準で入ってるものを小さく使う分には悪くないと思います。


デカい場合はcmd.exeじゃなくて、最近はWebアプリOnlyですね。。React.jsったって簡単だし。仮想化技術でホスト作るのも簡単だ。

コメントを投稿する