バッチ職人になろう (WindowsとLinux上での開発業務を自動化するノウハウ集)
なぜバッチ職人になる必要があるのか
あなたは,自分の作業を自動化するか。
いつまでも手動で,ダラダラと手作業を行ない続けるのであれば
あなたのエンジニアとしての生産性は,そこで打ち止めである。
いつまでも,同じ作業に同じだけの時間がかかる。
いつまでも残業し続け,仕事を早く終わらせる事ができない。作業効率が低い。
また,誤操作のリスクも常に抱え込む。
単調な繰り返し作業ばかりが増えてゆき,脳みそも衰える一方。
このようなエンジニアが成功も成長もしないことは,言うまでもない。
自分の作業を自動化する習慣がある人は,そうではない。
有能なエンジニアは,ひと通り手作業を経験したら,まず真っ先に
「その作業を二度と行なわないで済むようにするためには,どうしたらよいか?」
と,考える。
そしてバッチやマクロを組み,費用対効果の範囲内で作業を自動化する。
二度と,同じ作業をする必要が生じない。
ワンクリックで済むので,時間がかからない。
ミスもなく,作業の品質が良い。 神経も使わない。
作業の引き継ぎに際し,他人に教える手間もかからない。
だから,その人は常に余裕がある。
バッチ職人になろう。
バッチで済むはずの作業を,無意味に手作業で行なうのをやめよう。
そうすれば今後は,バッチで済ます事が不可能な,
人間にしかできない,もっと高い次元での作業に対して
より多くの時間を充てられるようになる。
あなたの成長は,そこから始まる。
コマンドプロンプト
基礎:
- コマンドプロンプトで,暗記するべき10の必須コマンド (前半) ファイル処理系
- コマンドプロンプトで,暗記するべき10の必須コマンド (後半)ネットワーク系
- 開発に役立つ,BATファイルの書き方・パターン集 (コマンドプロンプトの定石を体系的に学び,バッチ中級者になろう)
中級以上の文法を使った処理:
- 繰り返し実行可能なコンパイルバッチ
- 利用中の拡張子を抽出するバッチ (存在するファイルの拡張子の種類を,バッチで全取得する)
- bat中でforループをネストし,サブルーチンを呼び出して,条件付きファイル検索の結果を一斉コピーしよう (ファイル名の重複防止機能付き)
- BATのforループで,「0埋めされた数値」を連番で出力しよう (環境変数の遅延展開と,数値の大小比較判定の方法)
- 「カウントダウン後,定期的に動くタイマー」をBATだけで作る方法 (リアルタイムで残り秒数を表示し,処理を実行)
Windowsの仕組み関連:
- コマンドラインからプロセスを起動・終了する方法 (環境変数とレジストリについて)
- バッチファイルで,ログや日報のローテーションをする (環境変数の部分文字列を抽出する方法)
- コマンドプロンプトで,PATH上のファイルの位置を検索する方法 (Vistaの where コマンドをXPで)
便利ツール:
- 共有フォルダ上で,マウスだけで一発でコマンドプロンプトを開く方法 (UNCパスへのpushdをバッチクリックで済ませる)
- 開発時に,SVNリポジトリのディレクトリ上にコミットしておきたいバッチファイル
- 開発用のフォルダ構成を,自動的に生成してくれるバッチ (プロジェクト用のリポジトリ立ち上げに便利。ついでに,用が済んだら自動消滅!)
- ネットワーク接続が切れたら,自動的に再接続してくれるバッチ (WiFiの電波が弱くても,自動で無線LANにつなぎなおす)
応用,外部アプリケーションとの連携:
- バッチで,ODBC接続の設定を追加・更新・表示しよう(odbcconf.exeの使い方:PostgreSQLでの使用例)
- バッチで,wavなどの音声を再生しよう (コマンドプロンプトから音を鳴らす方法)
- コマンドプロンプトから,Win32 APIや任意のDLLを呼び出して実行しよう (コマンドプロンプトから画面キャプチャする方法の仕組みを理解) ★☆
- Windows上のコマンドライン・バッチで,WAVファイルの再生速度や音程を編集操作。2つのモノラルWAVを合成し左右ステレオ出力で保存する「SOX」のサンプルコード
WSH / JScript
ファイル処理:
- バッチで文字列を置換する (JScriptでテキストファイル処理)
- JScript・WSHで、UTF-8でファイルの読み書きをする方法 (ADODB.Streamで文字コード変換するサンプルコード)
- ウィルス対策ソフトをかいくぐって ADODB.Stream を使う (WSH/JScriptでUTF8の入出力・続編)
- UTF8Nの複数テキストを,一斉に置換するバッチ (JScriptでUTF8Nのファイルを読み書き)
- バッチで,BASE64のエンコード+デコードする方法 (WSH/JScriptで,バイナリのファイルをテキスト符号化)
- WSH/JScriptで,XMLを読み込みする (コマンドラインからDOM操作)
- 画像ファイルを,HTMLファイル内に埋め込み,1ファイルに統合する (BASE64を使ってファイル数を減らす方法)
- Windowsで,簡単にファイルを「ごみ箱」に送るバッチのサンプルコード。削除処理に「シェル名前空間」を使う仕組みの解説
- バッチで,複数ファイルを一括で「連番リネーム」するサンプルコード (写真や画像ファイルをフォルダ内でナンバリングし簡単に整理)
動作原理:
- JScriptバッチで,外部のスクリプトをロード+再利用する方法 (WSFで import / include する)
- WSHのCreateObject関数の引数のCOM識別子「ProgID」「CLSID」(GUID)とは何なのか解説。Windows内のActiveXオブジェクトを一覧表示して確認するコマンド
IE操作:
- JScript / VBScript (WSH)で,IEを自動操作しよう
- プロジェクト専用のDSLで,効率的にIEを自動操作する(WSH/JScript)
- ブラウザのビジー状態を判定するための,より良い方法 (WSHでIEを自動操作する際,COMのアプリケーションイベントを利用する)
- IEを自動操作する時,ダイアログやポップアップをどう扱うか(ファイルアップロードやアラートのダイアログを処理する方法)
- IE8で,ファイルのアップロードを自動化する方法 (WSH/JScriptでブラウザを自動操作するサンプルコード)
- バッチで,リファラを改ざんし,ユーザエージェントを改ざんし,POSTリクエストを自動発行しよう (HTTPリクエストヘッダを自由に生成)
- IEを自動操作する時,IEのバージョンを判定したい (WSH JScriptで,IE7とIE8の違いを自動認識する)
- WSH/JScriptバッチでIEを自動操作する時,jQueryを使ったWebスクレイピングを可能にするサンプルコード( $ セレクタが柔軟すぎる!)
Excel操作:
- JScript/WSH で,Excelファイルを読み書きしよう
- WSH/JScriptで,Excelファイルを読み書きする際のテンプレート (シート上の全行を読み書きするコードのひな型)
- CSVをExcelファイルに変換するスクリプト (JScript/WSHで,カンマ区切りCSVファイルから.xlsを生成)
- Excelブックの「シート目次」を,自動的に作成するバッチ (WSH/JScriptで,各シートへのリンク付きの目次を自動生成)
- Excelシートを読み取って,INSERT文SQLを生成するバッチ (Kingsoft SpreadsheetをWSH/JScriptで自動操作)
- WSH/JScriptで,Excelのデータを自動でグラフ描画 (題材:はてなカウンターのアクセス数を週ごとにグラフ化)
- Excelブック内の全シートを,1ファイルずつに分けて一括保存するバッチ (シート単位で自動ファイル分割し,1シートごとに一斉ファイル出力)
Word操作:
OpenOffice.orgを自動操作:
メール:
Windowsの自動操作:
Windows8:
- Windows8.1タブレットPCで,「画面の自動回転の許可」を,バッチでワンタッチで切り替える方法 (画面方向の縦横のロックをCUIで簡単に設定・解除)
- Windows8.1で,ストアアプリの起動ショートカットをデスクトップに作成・設置する簡単な方法
ハードウェア情報の読み書き:
- メモリ・CPUなどハードウェアの構成情報を,バッチで取得しよう (WSH/JScriptでWMIを使う方法)
- Windowsバッチで,パソコンのCPUの温度をモニタリングしよう (WMIを使って過負荷・発熱しすぎを監視するWSHスクリプト)
- バッチで,レジストリの値の読み取り・書き込み・存在判定をしよう(WSH/JScriptでレジストリ操作のサンプルコード)
その他のCOMオブジェクトの利用:
- コマンドプロンプトを,Webブラウザとして使おう (WSH・JScriptでXmlHttpRequest)
- バッチで,画像を生成・加工・一括処理しよう (WSH/JScriptでImageMagickを呼び出す方法)
- Windowsバッチで,iTunesのプレイリストを読み書きして,音楽ファイルをまとめて抽出する方法 (WSH/JScriptでiTunesを自動操作)
- Windowsバッチで,手軽に日本語テキストを自動読み上げ(Text To Speech)する方法 …WSHでSAPIやSpeech.SpVoiceを使う音声合成の手順とサンプルコード
自然言語処理:
- Windowsで英語の文章を形態素解析するツール「TreeTagger」の導入手順と使い方 (フリーソフトのPOS Taggerで,英文の単語分解・品詞判別をバッチ処理化)
- Windows上でCUIで動く,無料の「オフライン英和辞典」バッチ。コマンドラインから英単語の日本語翻訳を自動化するWSHサンプルコード
- Windowsのバッチで「kakasi」のコマンドを呼び出し,漢字かな混じりの文章をローマ字変換したり,単語に分解したりする方法 (kakasiで形態素解析するWSHサンプルコード)
外部ツールとの連携:
- PostgreSQLのバッチを,パスワードを聞かれずに実行する方法(psqlも設定ファイル編集も不要)
- WSH・JScriptから Graphviz を利用するためのクラス (関係グラフを描画して、複雑な構造のデータを可視化する方法)
- Windowsバッチ・コマンドで,大量のPDFを一括で結合・分割し,各ページ数を調べて一定サイズにまとめよう(pdftkをWSHで呼び出す)
WSHを応用して作成したツール:
- CGIが動くWebサーバを,3分で自作しよう (ブラウザからのHTTPリクエストを処理する,簡易ソケットプログラム)
- Java のスクラップブックを HTML + JScript で作る (HTAで子プロセスを操作)
- バッチで,コーディング規約を守らせよう (全ソースコードをチェックして,ルール違反を自動検出)
- JScript製の簡易 HTML テンプレートエンジン (Webサイト作成時に,画面の共通部品を外部読み込み)
- サクラエディタのマクロで,CSSを自動整形しよう
- SVNで,コミット時にログの入力を強制する (Windows版subversionのサーバ側フックスクリプトの作成方法)
- はてなカウンターのアクセス解析を整理して,「人気記事のランキング」を自動生成するバッチ
- Excelシート内で,URLを含むセルを,一括してハイパーリンクに変換するバッチ
- 「はてなカウンター」から1年分の「リンク元」情報を抽出し,URLをExcelに記録するバッチ
- 「はてなカウンター」から1年分の「検索キーワード」情報を抽出し,Excelに記録するバッチ
- 「はてなカウンター」から,今月の情報を一括して抽出しExcelに保存するバッチ
VBA
Excel VBA
- ドキュメント作成を楽にするための,Excel VBA 頻出8パターン ★
- VBA(2007もOK)で,ファイルの再帰検索をしよう (Application.FileSearchで複数のブックを処理)
- Excelシート上で指定領域をオートフィルするVBAマクロ
- Excelシート上のデータを DB にインポートするVBAマクロ
- Excel VBAで,グラフを自動で描画しよう(データ範囲を動的に変える) + ソフトウェアの品質保証について
- Excel VBAのマクロで,IEを自動操作しよう (DOMセレクタ関数をVBAで自作) ☆
- Excel VBAのマクロを,複数のブックから利用する方法 (標準モジュールをブックの外部で管理して,共通ライブラリとして読み込み)
- Rails と Excel VBA で,XMLファイルを読み書きしよう (MSXMLとREXMLの使い方)
- Google 検索の「サジェスト機能」を, Excel のシート上にVBAで作る (セルの内容に応じて入力規則を動的に変える方法)
- 画面のスクリーンショットを,Excelブック内に自動的に保存するバッチ
- Excelのマクロを外部に吸い出して保存するバッチ (WSH/JScriptで,VBAのソースコードだけを抜き取る)
- パスワード付きのExcelの保護を,バッチで自動的に解除しよう(VBAマクロが見れないブックに対して,パスワードを自動入力)
- Excel VBAで,フォルダ内の画像ファイルを一括でシートに取り込み,サムネイルのアルバムを自動生成
- Excel VBAでIEを自動操作する際,COMイベントを利用する方法 (WithEventsでブラウザの挙動を細かく把握する)
Word VBA
UWSC
全般:
ブラウザの自動操作:
- UWSCのマクロで,IEを起動して自動操作するサンプルコード
- UWSCで,IEを自動操作するためのライブラリ (ファイルアップロードも自動化できる)
- UWSCでIEを自動操作し,回帰テスト/JavaScript実行/ファイル保存 などができるライブラリ
- ブラウザ上で,マウスのドラッグ&ドロップも自動化できるスクリプト(UWSCでIEを自動操作するライブラリ 1.2)
- ブラウザの自動テスト中に,テスト結果をExcelに記録させる(UWSCでIEを自動操作するライブラリ 1.3)
Bash
- Linux上でPerlで開発するための bash コマンド集
- ユーザ配布用のbashシェルを作成するための 17 のコマンド
- bashでcronジョブを自動登録する (バッチでcrontabを編集)
- Linux上で,巨大なサイズのダミーファイルを作成する方法
- Linux上でシェルが実行される仕組みを,体系的に理解しよう (bash中級者への道)
補足
本ページは,もともと「開発者のためのTips集」の一部であった。
しかし,記事の数が増えたため,このカテゴリは独立して
本ブログのルート記事に昇格されることになった。
ここで扱われているようなレベルの作業は,極めて低いレイヤの作業である。
エンジニアは,一刻も早くこの作業レイヤを制覇し,
この次元を脱する事が望まれる。
つまり,いつまでも手動で作業しているのはもちろん問題外だが,
いつまでも「バッチだ」「自動化だ」というような観点でしか考えられないとしたら,
それはそれで,エンジニアとしての成長の妨げとなる。
自動化技術を自由自在に使いこなせるようになろう。
もし,それらの技術を「もはや意識しないで済むほどのレベル」に到達すれば,
次は,より高いレベルでの作業へ ―― つまり,自動化できない,
「上流工程」の領域へシフトしてゆく事ができるだろう。
関連する記事:
JavaScriptのコーディングTips集
http://language-and-engineering.hatenablog.jp/entry/20140311/JavaScriptProgra...
JavaScriptの動かないコード (JavaScriptエラー集)
http://language-and-engineering.hatenablog.jp/entry/20080912/1221297779
開発者のスキルチェック集
http://language-and-engineering.hatenablog.jp/entry/20110717/p1
上流工程から下流工程までカバーした,工程別のシステム開発のTips (要件定義・プロジェクト立ち上げから,設計・実装・テストまで)
http://language-and-engineering.hatenablog.jp/entry/20140810/DevelopmentTips