そろそろバッチファイルはやめてくれないか
もう平成が終わるというのに、未だにWindowsでbatファイルやVBSでオペレーションしている人がいる。こういう言い方をすると、「新しければいいという訳じゃない!」と言われそうです。以前、VBAに関するコラムを書いた時にもそういう意見を多く頂きました。古いかどうかより、IEのように妥協で保守されているものを使い続けるのを否定したいです。
新しいものにキャッチアップするにも技術は必要ですが、古いものを使い続けるにも技術は要ります。「いままで動いた実績がある」と主張する方もいるでしょうが、これからを乗り切る対策はありません。今まで動いていたとしても、メンテナンス性や汎用性は担保できません。そもそも、メンテナンス性や汎用性が高ければ、円滑に新しい技術をベースとしたものに移行できます。
インフラエンジニアをやっていて一番コストがかかると思うのは、レガシーへの対応です。レガシーの対応といっても、システムだけではなく人も含めてです。過去の成功の固執する人、新しい事を覚える気が無い人などがそれにあたります。そういう人は、確かに間違えたことは言いません。下手に説明がついてしまうのでタチが悪いです。結果として、技術負債をその場の理屈で持ち越してしまいます。
実際、バッチでもいろいろできてしまいます。systeminfoを一発叩けば、情報だけならいろいろ取れます。しかし、それ以上のことはできません。Unix系のシェルのように、パイプを通して後続処理に繋げられるような構造になっていません。どちらかと言えば、レガシーかどうかというより、明らかに性能として劣るものだから使って欲しくないです。バッチでしかできないことはどんどん減っているので、今更使う理由はありません。
バッチの性能が劣るのが嫌なのもそうですが、レガシーを使用し続けることへのコスト計算ができない人への憤りというのが大きいです。現代社会では、古いものを維持したり、古いものに合わせるのにも労力やお金が膨大にかかります。そういうコストを認識せずに「今までの実績があるからコレが正しい」と言われても、殺意しか沸きません。大人気がないとは思いますが、バッチファイルを撲滅したいと思うのにそういう理由もあります。
コメント
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ったって簡単だし。仮想化技術でホスト作るのも簡単だ。
とおりすがり
良い物とされたRISCが淘汰され、レガシーを動作させることを残したx86が生き残ったという事実がある。
バッチファイルの仕様には強力さはないが、至ってシンプル、そんなに保守にコストがかかるわけではない。
だからこそマイクロソフトもレガシーが動くバッチファイルを廃止する気は無い。
PowerShellの方が複雑でバグが消えるまでも時間がかかった。
言いたいことはわかるが、引き合いにした内容が悪いな。
私は歴史や反省を無視して新しい物を崇拝する人物に殺意を覚える。
Horus
> とおりすがり さん
常に優れたものが勝ち残るという訳ではありません。その主張に関しては同意します。ただし、バッチファイルに関しては、保守してないから保守コストがかからないという事例が多いです。コメントの見解の軸になる部分が現行ありきの視点に偏っているように思えます。
言いたいことは分かりますが、殺意を抱くなら計画的に感情を制御してください。思いが空回りします。
匿名
そう言う論議を見て思うのは一昔のMicrosoftのWindowsの歴史を思い出しました。
強引にアップデートをしてデバッグなどをしっかりしないで世に出し続け大人気OS作れたのにユーザの意見を無視して最新だから使えと言わんばかりのアップデートをした結果、圧倒的な優位が消滅した歴史が(´・ω・`)
貴方はそれ繰り返したくない人達の経験した歴史を勉強する必要があると感じました。
結局、核爆弾廃絶が出来なくても平和に近づく方法はあります。核爆弾のような物に対して怒りを向けるよりは自身のスキル向上、技術開発する方が早いのではないでしょうか?
匿名
最近思ったこと。
投資コストが圧倒的に低い場合や、
レベルの低い世界では、世界観が違うから
レガシーかつシンプルなものに寄せた方が良い
レガシーで複雑になるものは切り捨てる、
新しくても複雑orコストが高いものは切り捨てる