きょうはAutoHotkeyについてお伝えしますね。
このAutoHotkeyというのはバージョン1とバージョン2があるんです。
バージョン1(以降v1と記載)は昔からあるものです。
そしてバージョン2(以降v2と記載)は最新のものになります。
v1をもともと使っていた人がv2を使い始めるとエラーが続出しています。
っというわけで、今回はv1とv2の使い方の違いについてお伝えしますね。
初心者さんにもわかり易いように平易な言葉をできるだけ使って参ります。
はじめに:なぜバージョンの違いを知る必要があるのか?
AutoHotkeyを学び始めると、多くの方が一つの壁にぶつかります。
先程もお伝えしましたが、インターネットで便利なスクリプトを見つけて試してみた時に、なぜかエラーが出て動かない…なんてことがあるのです。
あなたにもそんな経験はありませんか?
その原因の多くは、AutoHotkeyのバージョンの違いにあるんです。
現在、主流は新しいv2ですが、インターネット上には古いv1の情報やスクリプトがまだたくさん残っているのです。
実際に、海外の掲示板Redditで、ユーザーx(仮称)
さんがv2.0.6を使っていたところ、C(仮称)
さんが共有したv1.1.33.02向けのスクリプトが動かずに困っていた、という典型的な場面がありました。
この記事の目的は、v1からv2へのたくさんの変更点の中から、特に初心者の方が最初につまずきやすい「最も重要な構文の違い」に絞って簡単な言葉で解説することです。
これを読めば、ネット上の情報に惑わされず、スムーズにv2の学習を進められるようになりますよ。
まずは、v1とv2のたった一つの大きなルール変更から見ていきましょう。
一番大きな変化:「古い書き方」と「新しい書き方」の統一
v1とv2の最も根本的な違いは、「書き方のルールが一つになった」ことです。
これがほぼ全ての変更の根本原因になっています。
v1には、2種類の全く異なる文法ルールというものが混在していました。
- コマンド構文(古い書き方):
Send, ^c
やa = 10
のように、命令の後にパラメータをそのまま書くスタイルです。書かれた文字は文字通りに解釈されます。 - 式構文(新しい書き方):
Send("^c")
やa := 10
のように、数学の式や現代的なプログラミング言語のように値を「評価」するスタイルです。
v1を学ぶことは、まるで文法ルールが全く違う2つの言語を、場面に応じて使い分けながら学ぼうとするようなものでした。
とても混乱しやすかったのです。
v2では、この複雑さがなくなり、後者の「式構文」という、より現代的で一貫性のあるルールに一本化されました。
最初は少し違うように感じるかもしれませんが、一度慣れてしまえば、覚えるルールが一つだけなので、v2ははるかに論理的で予測しやすく、プログラミングが初めての人でもずっと学びやすくなったのです。
この「式構文への統一」という大原則があるからこそ、次にご紹介する3つの具体的な書き方が変わったのです。
では、特に重要な3つのポイントを見ていきましょう。
これだけは押さえたい!基本的な構文の3大変更点
スクリプトを書く上で、ほぼ必ず使うことになる基本的な部分での大きな違いを3つ紹介します。
変数への代入:「=」から「:=」へ
これはとても大きな違いになりますよ。
変数にデータを入れる「代入」の記号が変わっているのです。
v2では:=
を使います。
一見すると、この小さなコロンは面倒に感じるかもしれません。
しかし、すぐにこの明確さに感謝するようになります。
これにより、「値を代入している」のか「値を比較している」のかが一目瞭然になり、長いスクリプトでのうっかりミスを減らしてくれるのです。
バージョン | 書き方 | 説明 |
v1 | a = 10 | イコール1つで変数に値を代入していました(コマンド構文)。 |
v2 | a := 10 | コロンとイコール(:= )を使って代入します(式構文)。 |
文字列の送信:「Send,」から「Send " "」へ
キーボード操作を自動化するSend
コマンドが、v2ではSend()
関数に変わりました。
これに伴い、送りたい文字やキーを必ずダブルクォーテーション("
)で囲むという、非常に重要なルールができました。
これは、Send
が関数になり、ほとんどのプログラミング言語と同様に、テキスト(文字列)を関数に渡すときは引用符で囲む、というルールになったためです。
バージョン | 書き方 | 説明 |
v1 | Send, ^c | 送りたいキー(Ctrl+C)をそのまま記述していました。 |
v2 | Send "^c" | 送りたいキーを" で囲む必要があります。 |
if文での比較:「==」から「=」へ
「もしAとBが同じなら」という条件を書くif
文。
ここでも記号が変わっています。
これはv1経験者ほど混乱しやすい点ですが、実はこれもルール統一による改善なのです。
v1では、比較の方法がif a = b
(コマンド構文)とif (a == b)
(式構文)の2通りあり、初心者を悩ませる原因でした。
v2では式構文に統一された結果、比較はif (a = b)
の一つだけになりました。
最初は奇妙に見えるかもしれませんが、あいまいさがなくなり、よりシンプルで一貫性が保たれるようになったのです。
バージョン | 書き方 | 説明 |
v1 | if (a == b) | 式の中ではイコール2つ(== )で比較していました。 |
v2 | if (a = b) | 式の中ではイコール1つ(= )で比較します。 |
--------------------------------------------------------------------------------
基本的な構文の違いが分かったところで、次はAutoHotkeyの主役である「ホットキー」の書き方の違いを見てみましょう。
ホットキーの書き方の小さな、でも重要な違い
ホットキーに複数の命令を書きたいとき、その処理の「かたまり」を定義する方法が変わりました。
v2では、複数行の処理は、プログラミングにおける関数のように**中括弧{ }
**で全体を囲む必要があります。
これは単なる見た目の変化ではありません。
v1では、ホットキーの終わりを示すReturn
を書き忘れると、次のホットキーの処理まで実行されてしまう「フォールスルー」という、初心者にとって非常に見つけにくいバグの原因になっていました。
v2の{ }
でブロックを明確に区切る方法では、この種のエラーが構造的に発生しなくなり、より堅牢でデバッグしやすいコードが書けるようになったのです。
v1の書き方(Returnで終了)
^a::
move_beginning_of_line()
Return
v2の書き方({ }で囲む)
^a::
{
move_beginning_of_line()
}
--------------------------------------------------------------------------------
これで基本的な違いはマスターです!
最後に全体をまとめましょう。
【まとめ】AutoHotkey v1とv2:初心者のためのやさしい違い解説
v2への変更点、いかがでしたか?
最初は少し戸惑うかもしれませんが、実際にはルールが統一されて、より一貫性のある、分かりやすい言語に進化したのです。
今回学んだキーポイントを振り返ってみましょう。
- 根本原則
v1の2つの書き方(コマンド構文と式構文)が、v2では式構文に一本化されました。
これが全ての変更の理由です。 - 変数への代入
=
ではなく:=
を使います。 - 文字列の送信
Send()
は関数なので、送る文字列は必ず"
で囲みます。 - if文での比較
式の中では==
ではなく=
を使います。 - 複数行のホットキー
Return
で終わらせる代わりに{ }
で囲み、バグを防ぎます。
これらのポイントを押さえておけば、v1のコードを見ても混乱することなく、自信を持ってv2のスクリプトを書いていくことができますね。
今回解説したのは、初心者が最に出会う最も一般的な変更点です。
学習を進めていくと、さらに細かい違いに出会うこともあるでしょう。
その時は、公式サイトの変更点リストが素晴らしい道しるべになります。
公式サイト:Changes from v1.1 to v2.0
この変更点を乗り越えれば、あなたの自動化の可能性は無限に広がりますよ。
楽しいスクリプティングライフを!
ここまで読んで頂きまして誠にありがとうございました。
それではこの辺で。