auカブコム証券のkabuステーション®をAutoItでWindows上で自動起動してみる


2022/09/23
AWS EC2でWindowsインスタンスを立ち上げてRDPリモートデスクトップ接続を試す
蛸壺の技術ブログ|auカブコム証券のkabuステーション®をAutoItでWindows上で自動起動してみる

著者的に嗜む程度にですが、資産形成の一環もかねた趣味として株式投資を行っています。

株式投資に限らず様々な取引がオンラインで行われるのが主流である昨今、日本に住んでいる以上、気候変動による自然災害の激甚化で、いつなんどき被災して電気の無い状況に陥るかも知れないという不安が付きまといます。

最近まで、自宅に自律的な株式・FX取引を行うオンプレサーバーを立てて、独自の運用をしていたのですが、ここ数年でも、個人的に何回か取引はおろか、インターネットも満足に繋げない環境になったことを経験しました。

取引できない期間が長期に渡ることもあり、健全な資産管理を心がける上でも、このような状況はかなり好ましくありません。

ということで、レンタルVPSサーバーなどを利用して、取引環境自体をリモートサーバーで安全に稼働させることで、安定した取引環境を目指す第一歩として、AutoItによるWindowsアプリケーションの自動操作の手順を考えていこうと思います。


合同会社タコスキングダム|蛸壺の技術ブログ

AutoItをWindowsへインストールする

WindowsアプリケーションをスクリプトでGUI操作するツールはいくつか選択肢がありますが、今回は代表的なフリーソフトの「AutoIt」をベースに説明していきます。

WindowsをGUIからの操作を自動化する第一歩として、
AutoItを適当なWindows環境にインストールしましょう。

実行ファイルのダウンロードページから、AutoItのインストーラーをダウンロードしてきます。

合同会社タコスキングダム|蛸壺の技術ブログ

合同会社タコスキングダム|蛸壺の技術ブログ

後はイントーラーをダブルクリックして、そのままデフォルト設定でインストール作業を進めていきます。

合同会社タコスキングダム|蛸壺の技術ブログ

合同会社タコスキングダム|蛸壺の技術ブログ

合同会社タコスキングダム|蛸壺の技術ブログ

この記事を執筆中は、現状のリリースバージョンはAutoItのv3.3になっています。

余談ですが、AutoItは完全無償なのに高度なWindows GUI操作を可能としてくれる一方で、悪意のある第三者がマルウェアコードを仕込んだものをひっそりと配布していたりと、何かと利用する上で深刻なリスクがあるかも知れないソフトウェアです。

AutoItを使う際には、AutoIt公式からのリソースダウンロードを徹底し、最新のリリースバージョンを利用するように心がけてください。

AutoIt用のVSCode拡張機能を利用する

AutoItマクロを作成するにあたって、AutoItのプログラムに付属している「SciTE editor」をそのまま使っても良いのですが、普段からVSCode使いなら、AutoIt用の便利な拡張機能がいくつか存在しています。

合同会社タコスキングダム|蛸壺の技術ブログ

ここでは、もっともダウンロード数が多い拡張機能をインストールしてみます。

合同会社タコスキングダム|蛸壺の技術ブログ

拡張機能を入れると、関数のオートコンプリートの他に、マウスを合わせるだけで説明と利用方法がサッと確認出来て、AutoItスクリプトの作成も非常に快適になります。

合同会社タコスキングダム|蛸壺の技術ブログ


合同会社タコスキングダム|蛸壺の技術ブログ

AutoItでkabuステーションに自動ログインする

先程の節の内容で、WindowsOSへのAutoItのインストールが完了したので、次は『kabuステーション®』をAutoItスクリプトから起動することを考えていきます。

まず始めに知っておくべきことは、auカブコム証券の開発する高速トレーディングツールの『kabuステーション®』は単純なWindowsのバイナリアプリケーションではなく、
ClickOne形式(.appref-ms)のスクリプトで提供されています。

合同会社タコスキングダム|蛸壺の技術ブログ

このClickOne形式のアプリケーションの実体は、バイナリプログラムではなく、windowsで動作するスクリプトの一種で、テキストファイルとして中身を覗くことができます。

            
            % ls
#...
-a----        2022/09/14     17:21            338 kabuステーション.appref-ms

% cat .\kabuステーション.appref-ms
http://download.r10.kabu.co.jp/kabustation/KabuStation.application#KabuStation.application, Culture=neutral, PublicKeyToken=*************, processorArchitecture=msil
        
このスクリプトが行っていることは、ウェブ上にリンクされているURL先のファイルをローカルにダウンロードしてから、ダウンロードしたプログラム本体を開くことをしています。

こうすることで、ClickOne形式のアプリケーションは、ユーザーに常に最新のソフトウェアバージョンの利用させることができる一方で、アプリケーション起動のたびにブラウザー経由で、ソフトウェア本体(かアップデート差分)をダウンロードしてからでないと動作させることが出来ません。

ということで、ClickOne形式のアプリケーションを自動ログイン化しようとした場合、デスクトップにアイコンをダブルクリックして起動するという方法ではなく、
「適当なブラウザーを起動して、リンク先のURLへナビゲーションさせる」方法が良いようです。

まずは、AutoItマクロの手順を少しでも簡略化させるため、ログイン時の口座番号の情報を打ち込んで、記録させておきます。

合同会社タコスキングダム|蛸壺の技術ブログ

これでkabuステーションの起動時毎に、パスワードだけを入力するような状態に維持することができます。

ではここからAutoItスクリプトを作成していきましょう。

AutoItスクリプトは
.au3形式の拡張子をもつ、BASIC言語ライクのテキストファイルのことです。

適当な場所に
login.au3という名前で空のファイルを新規作成し、以下の内容でAutoItスクリプトを編集してみます。

これでIEでkabuステーションを立ち上がるかをチェックしてみましょう。

            
            #include <IE.au3>

;👇IEを起動し、ダウンロードURLへ遷移
$oIE = _IECreate("http://download.r10.kabu.co.jp/kabustation/KabuStation.application")
        
ひとまずはこれでIEが起動し、通常のクリック起動で、先程の図のようなログイン画面まではいけるようになっていると思います。

ただ、更にログインを進めるにはパスワードを入力する必要があるので、パスワード入力も自動化する必要があります。

先程のAutoItスクリプトを以下のように更に手直ししてみましょう。

            
            #include <IE.au3>

;👇IEを起動し、ダウンロードURLへ遷移
$oIE = _IECreate("http://download.r10.kabu.co.jp/kabustation/KabuStation.application")

;👇「ログイン」というウィンドウが作成されるまで待機
WinWait("ログイン", "", 10)

;👇[重要]kabuステーションが起動したら、追加で1秒(=1000ms)更に待つ
Sleep(1000)

;👇パスワードの文字列を送信
Send("<kabuステーションのログインパスワード>")

;👇「ログイン」ボタンをクリック
ControlClick("ログイン", "", "[NAME:btnOK]")
        
このスクリプトをデスクトップ上に配置し、直接クリックすると、

この動画のようにワンクリックで、kabuステーションが起動するようになっていればOKです。

ポイントとしては、kabuステーションのメイン画面が起動してから追加で少し待っておかないと、パスワードの入力の一部が欠損するようで、ログインが失敗してしまいます。

ここらへんはお手元の環境で多少挙動が違うかも知れませんので、上手く動作しないようであればパラメーターの微調整を各自で行ってください。

以上、AutoItを使った簡単なkabuステーションへのログイン手順の説明でした。


合同会社タコスキングダム|蛸壺の技術ブログ

参考サイト

AutoIt v3 ドキュメント 日本語訳プロジェクト

auカブコム証券でのシステムトレードの方法(3) auカブコムのkabuステーションを、WindowsのVPSで自動起動する方法

記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。