人工知能企業のエンジニアの開発記録

人工知能企業のエンジニアの模索の記録です。pythonを基とした開発や、スキルアップのためのライフハックおよびそれらへの挑戦を書き連ねます。

OSX 上でwindowsを動かすために

てらです。

最近はまた一段と業務が忙しくなり、フロントエンジニアになったり画像系データサイエンティストになったり、インフラエンジニアになったりしているフルスタックエンジニアです。

元々のスキルセットがwebアプリケーションに傾倒していましたので、devops辺りに困りながら仕事しています笑

また、土日にこんなjupyter拡張機能を作っていたので見れくれると幸いです。

今回は、少し趣旨が外れて、windows向けアプリを作成のためのwindows環境の構築のお話をします。

pythonについてはほぼ書くつもりはないですが、pythonアプリ作成に直結し、また別の記事でpythonが絡む話をします。

なぜwindows10なのか

仕事で業務効率化アプリの話があって、使用する際のプラットフォームがwindwosになりそうということで。

機械学習モデルを組み込もうとした場合は必然的にpythonを使うことになります。 (学習だけをpythonでやってパラメータを別の言語で使うこともできるらしいが)

とすると、大抵は機械学習モデルをサーバーサイドに置いてAPIとして利用することとなります。 そうするとアプリの形態はweb(html/css/javascript)かネイティヴ(swift, java, kotlin, react nativeなど)となります。

しかしwindows向けのデスクトップアプリを作成する場合は大分話が違ってきました。 過去にそういう仕事があり、その時はUI作成にPyQtを使いましたが外部の情報含めてノウハウが非常に少なく相当苦労しました。

今回はそのリベンジの一環で、まずはwindows向けのアプリ開発環境を整える段階がこの記事です

作りたいアーキテクチャ

electron(html/css/javascript) + flask(python) 構成のアプリのビルド・テストが行えるwindowsを用意したいと思いました。 githubで見つけた、Electron as GUI of Python Applications(英語) というelectronを用いたpythonアプリケーション構築の紹介がありましたが、まさにこれに挑戦したい次第です。

本題のアーキテクチャですが以下のものが使える・できるものを用意しようと思いました。

  • pyinstaller(pythonwindowsアプリ化ツール)の使える環境
    • 今回はvenvかvenvをanaconda上で動かすことを想定
  • electronの使える環境
    • windows向けアプリがwindows上でしか作れないかは未調査だが一応。要nodejs
  • 出来れば上記のビルド用のwindows環境とテスト用のwindows環境が欲しい
    • vagrantでそれぞれの仮想環境を作成し、ansibleを仮想環境イメージの構築に使用
    • 特にGUIで使いたいということから、virtualbox利用を前提とするvagrantが適任と判断
  • windowsには詳しくないけど、上記の実行にPower Shellが必要?要調査

今回やったこと

vagrantでwindows10環境を構築しただけです。今回はosx High Serria上にvagrantを敷きました。 他にもやりたいことがある&windows向けのansibleの使い方がまだわからないので、 まだansibleに触ることはできていません。追々記事にしていこうと思います。

vagrantのインストール

virtualboxも事前に必要になります。 今回はvirtualboxvagrant共に公式サイトのインストーラーを使いましたが、brewでもインストールできます。 (インストールするまで気づかなかった)

参考記事まんまですが、brewの場合は

brew cask install virtualbox
brew cask install vagrant

で、caskが入っていない場合は先に

brew tap caskroom/cask

caskを用意

公式のインストーラーでVirtualboxをインストールした時は、High Serriaのセキュリティ機能でインストールができないので、 参考記事を見ながらセキュリティブロックを解除しました。

仮想環境の保存先を指定する

vagrantでwindows10のイメージをファイルにダンプしたら10Gぐらい使いました。

事前に容量を使うことは予測していましたが、vagrantで複数環境を用意する場合は、 10Gほどのものを複数用意することになるので、外付けHDDに環境を保存することにしました。

これも参考記事まんまで、以下を~/.bash_profileに追加 (/path/to/...の箇所は自分が保存したいパスに)

vboxmanage setproperty machinefolder /path/to/hdd/virtualbox
export VAGRANT_HOME=/path/to/hdd/vagrant.d

すぐにvagrantコマンドを使う場合は、忘れずに source ~/.bash_profile コマンドを。

windowsイメージを用意

vagrantをまともに使うのはこれが初めてでしたが、dockerと同様Vagrant Cloud(英語)というイメージのリポジトリがあるようで。

今回は、EdgeOnWindows10をベースとして利用。

公式にあったコマンドでVagrantファイルを用意

vagrant init Microsoft/EdgeOnWindows10 --box-version 1.0

イメージの設定

Vagrantで作成したwindows10をGUIで動かしたかったのでその設定。

同様のことをここここで紹介されていたので参考に

今回はGUI上で使うことも想定していますので、GUIで起動する設定をしました。必要事項としては

  • vb.gui = true (必要ないと書かれている場合もありましたが、一応入れました。)
  • vb.memory = 2048 (仮想環境で使えるメモリの指定。今回は2G)
  • vb.cpu = 2 (同様に使用するCPUの指定。今回は2)
  • vb.customize ["modifyvm", :id, "--vram" , "128"] (ビデオメモリの指定。GUIには必須?でGUI表示に使う。)

ちなみに使用するメモリを4G(4096)にした場合、メモリが片付いていないと止まるほど重くなったので、特にメモリを使う作業をしない限りは2G推奨です。

参考までに、私のosxのスペックは以下のようになります

- macbook air
- メモリ4G
- CPU Intel Core i5
- SSD 256G

実行

vagrant up

で起動できます。自動でGUIが起動すると思いますが、 自動で起動しない場合でも、VirtualBox上からGUI画面のウインドウを開くことができます。

f:id:TeraBytesMemory:20180304130703p:plain

こんな感じに起動します。

メモリ2Gに指定した時の画面ですが、少し動作が重かったです。

また、メモリ4Gで動かしていた時にAnacondaをインストールしましたが、その時はインストールに成功しました。

f:id:TeraBytesMemory:20180304130800p:plain

画像の通り、エンタープライズ版評価版です。Vagrant Cloudでは基本エンタープライズ版評価版のイメージしか上がっていない、というよりかはライセンスなしで使えるのがこれだけみたいですね。

90日しか使えない点に気をつけたいです。

参考記事