本記事は東京学芸大学 櫨山研究室 Advent Calendar 2020の初日の記事になります.
まえがき
私たち,櫨山研究室はソフトウェア工学の研究室になります.
ソフトウェア工学は実務寄りな内容が多くソフトウェアの開発経験がないと理解しにくい分野になります.
そこで研究室に配属された新3年生には最初の半年間でチームでWebアプリケーションを開発するという取り組みを伝統的(?)に行っています.
例年では顔合わせの意味も含めて新3年生の開発環境構築を研究室でやるのですが今年はコロナの影響で難しくなってしまいました…
そこで遠隔でもスムーズに環境構築が進められるようにちょこっと自動化しました.
本記事ではその内容を扱います.
なおソースコードやドキュメントなどは以下のGitHubリポジトリから見ることができます.
概要
- 研究室配属後に最初に行う環境構築を自動化したよ
- この記事を内容を使えば,あなたのwindowsの環境構築を自動化できます
ソフトウェア開発環境を整えるには?
ソフトウェア開発を始めるに当たって,いろいろなソフトウェアをPCに導入する必要があります.
使用するプログラミング言語やビルドツール,IDEやテキストエディタ,データベース,仮想環境を使うならViturlBoxやDockerなど…挙げていくとキリがないですね.
プログラミングやPCに馴染みがない人はこれらのソフトウェアを導入するとなると「Webブラウザからソフトウェアのインストーラをダウンロードしてソフトウェアをインストールする」といったGUIでの操作で導入することを想像するかと思います.
しかしプログラミングやソフトウェア開発に慣れてくると,導入するソフトウェアが増えてきたりプログラミング言語のバージョンの変更などの際にこういった操作が煩わしくなります.
そこで便利なのがCUI上で操作できるパッケージ管理ソフトです.
パッケージ管理ソフトを導入することでCUI上で統一的な操作で様々なソフトウェアをインストールすることができます.
Windowsのパッケージ管理ソフト
WindowsではChocolatey,Scoopがよく使われているようです.
以下ではそれぞれの特徴について記述しておきます.
Chocolatey
ChocolateyはWindows向けのパッケージ管理ソフトです.
Chocolateyをインストールすることで以下のようなコマンドでソフトウェアをインストールすることができます.
choco install インストールしたいソフト名
ChocolateyはWeb上でインストールできるパッケージを検索することができます.
またChocolatey GUIというGUIの管理ソフトもあります.
Web上でインストール可能パッケージの検索だったりGUIの管理ツールなどCUI操作に慣れていないユーザーでも使いやすい印象があります.
懸念事項としてはアンインストールコマンドが完全に削除ではなく一部ファイルが残るという部分です.
なおChocolateyは管理者権限が必要です.
Scoop
ScoopもWindows向けのパッケージ管理ソフトです.
Scoopをインストールすることで以下のようなコマンドでソフトウェアをインストールすることができます.
scoop install インストールしたいソフト名
Scoopは極力GUIを使いたくないユーザー向けであり,LinuxやmacOSのパッケージ管理ソフトに近い使用感になります.
ソフトウェアのインストール先はデフォルトでホームフォルダ配下であり,独立性が担保されています.
アンインストールコマンドで綺麗に削除されます.
前述のChocolateyとの差分はScoop公式のGitHubのWikiにまとめられています.
なおScoopは管理者権限を必要としません.
必要なソフトウェアを一括でインストールするスクリプトを書く
ここまでCUI操作を推してきましたが,CUIには強みがあります.
CUIではシェルスクリプトを作成することによって一連の処理を記述することができます.
そこでパッケージ管理ソフトの導入からソフトウェア開発に必要となると考えられるソフトウェアのインストールまでを行うスクリプトを組みます.
スクリプトの手順を図示すると以下のようになります.
なお今回はChocolatey,Scoopのどちらのパッケージ管理ソフトも使用していますが,管理的な意味ではどちらかに絞って使う方が良いかもしれません🙇♂️
インストールするソフトウェア
色々インストールしますが重要なのを抜粋すると以下になります.
(一覧はGitHubのREADME.mdに載せています.)
- Java 1.8/11/14
- Gradle 6.2.2
- MySQL 8.0
- VSCode
- tableplus
私たちの研究室では最初のアプリケーション開発は枯れた成熟した技術であるJavaのJSP/ServletとMySQLで作成します.
なのでJavaの環境とGradle,MySQLは必須になります.
エディタについては個人の好みなどもあるかと思いますが統一的な環境を用意しておくことは大切なのでVSCodeをインストールしておくことにしています.
(基本的にゼミでの操作手順や解説をする時のエディタにVSCodeを使用しています.)
tableplusはMySQLのGUIクライアントとして便利なのでインストールしています.
スクリプトのコード
実際のスクリプトのコードはGitHubにおいてあります.
ここでは説明用に改変したコードを載せます.
# scoopのインストール
if (gcm scoop -ea SilentlyContinue) {
Write-Host "[1/4] scoop is already installed! skipping this step."
} else {
Write-Host "[1/4] installing scoop..."
Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')
}
# chocolateyのインストール
if (gcm choco -ea SilentlyContinue) {
Write-Host "[2/4] chocolatey is already installed! skipping this step."
} else {
Write-Host "[2/4] installing chocolatey..."
Set-ExecutionPolicy Bypass -Scope Process -Force;[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
}
# gitのインストール (scoopのbucketの追加に必要なため優先的にインストールする)
if (gcm git -ea SilentlyContinue) {
Write-Host "[3/4] git is already installed! skipping this step."
} else {
Write-Host "[3/4] installing git..."
scoop install git
}
# パッケージをインストール
if (gcm scoop -and gcm choco -ea SilentlyContinue) {
Write-Host "[4/4] installing package..."
# scoopのbucketを追加
scoop bucket add extras
scoop bucket add java
# scoopでソフトウェアのインストール
scoop install adopt8-hotspot
scoop install adopt11-hotspot
scoop install adopt14-hotspot
scoop install gradle@6.2.2
scoop install graphviz
scoop install vscode
scoop install mysql-workbench
scoop install tableplus
scoop install vagrant
# chocolateyでソフトウェアのインストール
choco install -y mysql
choco install -y virtualbox
} else {
# scoop,chocoコマンドのが見つからない場合はエラーメッセージを出力
[string]$err='
[ERROR] command not found! The installation procedure may have changed.
See the chocolatey documentation.
https://chocolatey.org/install
See the scoop documentation.
https://scoop.sh/
'
$Host.UI.WriteErrorLine("$err")
exit 1
}
基本的にscoop
コマンドやchoco
コマンドが使えるかをIF文で確認し,使えなかったらインストールという愚直な方法です.
スクリプトの実行方法
Scoopやchocolatey本体のインストール方法に倣ってInvoke-Webrequest
でWeb上からコードを取得し実行します.
今回はGitHubで管理しているのでGitHub上からスクリプトのソースを取得してパイプで流します.
Set-ExecutionPolicy RemoteSigned -scope CurrentUser
iwr -useb raw.githubusercontent.com/#{GitHubリポジトリにあるスクリプトファイルへのパス} | iex
[注意]
単純な方法なので採用していますが,Web上のスクリプトコードには必ずしも安全である保証はありません.
安易に他人が作成したWeb上のスクリプトコードを実行しないようにしましょう.
遭遇したトラブル
以下では遭遇したトラブルと対処法についておいておきます.
Scoopでインストールしたソフトウェアにパスが通らない
Scoopではデフォルトではユーザーのホームフォルダ直下にscoopフォルダを作成し全てのソフトウェアを配置します.
ここでユーザー名に全角文字が含まれている場合にパスが通らない問題が発生するということがわかりました.
(なぜユーザー名に日本語を使ってしまうのかという疑問は置いておいて…)
scoopでは環境変数SCOOP
を利用することでインストール先を変更することができます.
以下ではインストール先をC:\Scoop
に変更しています.
$env:SCOOP='C:\Scoop'
[environment]::setEnvironmentVariable('SCOOP', $env:SCOOP,'User')
変更する前にインストールしたソフトウェアの引越し作業が必要ですが,これでユーザー名に全角文字を利用している人の環境も構築できます💪
ERROR hash check failed!
になる
今回はscoop-extrasバケットのtableplusのハッシュ値が異なりインストールに失敗していました.
こちらはエラーメッセージ通りにGitHubのIssueを上げました.
ScoopではBotがきちんと働いていて,Issueから即座にPRが作成されマージされました.
マージされた後で再度インストールを試みたら問題なくインストールできました✨
あとがき
実は私はmscOSを使っておりWindowsの環境構築と向き合ったのは初めてでした.
そのため仮想マシンでwindowsを動かしてせっせと準備をしました.
実際やってみたらscoopなどのパッケージ管理ソフトも使い勝手がよく「windowsも悪くないのでは🤔」と思えました.
皆さん,良き開発ライフを💪
参考文献
- ScoopでWindowsにおける開発環境構築を最適化しよう, https://blog.satotaichi.info/scoop/
- 【Chocolatey入門】導入から注意点、今後の可能性まで, https://qiita.com/kangetsu121/items/b6352b547cd32e71bc65