Racket: WindowsへのRacketのインストールと設定方法
はじめに
この記事では、WindowsにRacketをインストールし、基本的な設定を行なう方法を説明します。
設定後、ターミナルからRacketを起動し、すぐに関数型プログラミングの学習をはじめられます。
1. Racketについて
1.1 目的
このセクションでは、Racketの特徴を解説します。
1.2 特徴
- 関数型プログラミング言語
- プログラム内で新しい言語機能を定義できる強力なマクロシステム
- 公式による統合開発環境
DrRacketのサポート - コマンドラインツール
racoによる開発タスクのサポート
2. 前提条件
2.1 インストールディレクトリ
通常、RacketはC:\Program Files\Racketにインストールされますが、空白を含むPathを避けるため、この記事ではc:\lang\racketにインストールします。
2.2 設定ディレクトリ
環境設定用のディレクトリは、XDG Base Directory仕様にしたがって配置します。
通常、初期設定ファイルは$USERPROFILE (C:\Users\<ユーザー名>)下に保存しますが、ここにはWindows用のさまざまなフォルダやアプリケーションの設定用フォルダが存在しています。
これらのフォルダとの混乱を避けるためにXDG Base Directory仕様に従い、~\.config\racketにファイルを配置します。
上記の設定に合わせ、ほかの環境設定ディレクトリも変更します。
どのディレクトリを変更するかの詳細は、Racketの環境設定ファイル/ディレクトリまとめを参照してください。
3. Racketのインストール
Windows公式パッケージマネージャーwingetを用い、Racketをインストールします。
そのためには、Windows Package Managerツールがシステムにインストールされている必要があります。
3.1 wingetを使ったRacketのインストール
wingetは、Windowsの公式パッケージマネージャーで、コマンドラインからRacketをインストールできます。
c:\lang\racket下にインストールするため、--locationオプションでインストール先ディレクトリを指定します。
次のコマンドでRacketをインストールします:
winget install Racket.Racket --location C:\lang\racket
インストール後にracket --versionで、正常にインストールされたかを確認します:
c:\lang\racket\racket --version
次のように Racketのバージョンが表示されれば、正常にインストールされています。
Welcome to Racket v8.12 [cs].
3.2 Pathの設定
すべてのディレクトリからRacketを起動できるように、環境変数Pathにc:\lang\racketを追加します。
PowerShellで次のコマンドを実行します:
[System.Environment]::SetEnvironmentVariable("Path", [System.Environment]::GetEnvironmentVariable("Path", "Machine")+";c:\lang\racket", "Machine")
4. Racketの環境設定
4.1 環境変数の設定
Racketの設定ファイルをXDG Base Directoryに準拠させるため、関連する環境変数を設定します。
環境変数の設定は、次のようになります。
| 環境変数 | 変数説明 | 設定値 | 説明 |
|---|---|---|---|
PLTUSERHOME |
Racket用ホームディレクトリ | $XDG_CONFIG_HOME+"/racket" |
初期設定ファイルなどを保存 |
PLTADDONDIR |
ユーザーアドオンディレクトリ | $XDG_DATA_HOME+"/racket" |
ユーザー用にダウンロードしたアドオンを保存 |
次のコマンドで環境変数を設定します:
[System.Environment]::SetEnvironmentVariable("PLTUSERHOME", $env:XDG_CONFIG_HOME+"/racket", "User")
[System.Environment]::SetEnvironmentVariable("PLTADDONDIR", $env:XDG_DATA_HOME+"/racket", "User")
4.2 config.rktdの設定
Racketにはconfig.rktdという設定ファイルがあり、Racketのさまざまな設定を管理できます。
ここでは、アドオンをダウンロードしたときにファイルをキャッシュするディレクトリをXDG Base Directoryに準拠するように設定します。
コンフィグファイル config.rktdの場所: c:\lang\racket\etc\config.rktd
次のように、config.rktdを編集します:
#hash(
(build-stamp . "")
(catalogs . ("https://download.racket-lang.org/releases/8.12/catalog/" #f))
(doc-search-url . "https://download.racket-lang.org/releases/8.12/doc/local-redirect/index.html")
(default-scope . "user")
(download-cache-dir . "C:/Users/atsushifx/.local/cache/racket/download-cache") ;; ← 追加
)
上記のようにすることで、キャッシュファイルが~/.configディレクトリ下に保存されることを防ぎ、システムをきれいなまま保ちます。
注意:
-
downloadc-cache-dirはフルパスで書く必要があるため、C:/Users/<ユーザー名>/.local/cacheとXDG_CACHE_HOMEを展開して、そのあとに/racket/download-cacheを追加しています。 - 設定には
Racketのバージョン番号が含まれているため、Racketがバージョンアップした場合にはconfig.rktdを書き換える必要があります。
4.3 .gitignoreの設定
Racketホームディレクトリは、GitHubのdotfilesリポジトリでの管理下にあります。
Racketホームディレクトリ上には、初期設定ファイル、ユーザー設定ファイル、アドオン用のダウンロードキャッシュが存在します。
これらのうち、Racketのセッション情報を含むユーザー設定ファイル、および一時ファイルを含むダウンロードキャッシュはGitの管理下から外す必要があります。
これを実現するため、$XDG_CONFIG_HOME下の.gitignoreに上記ファイルを除外する設定を追加します。
次の内容を.gitignoreに追加します:
# Racket
_lock*
**/download-cache/
racket-prefs.rktd
4.4 アドオン用Pathの設定
アドオンによっては、実行用にランチャーを作成するものがあります。
ユーザーアドオンの場合は、アドオンディレクトリ+Racketバージョン番号下にランチャーを作成します。
この記事では、Racket 8.12をインストールしたので、$PLTADDONDIR+"/8.12"となります。
次のコマンドでアドオン用Pathを環境変数Pathに追加します:
[System.Environment]::SetEnvironmentVariable("Path", [System.Environment]::GetEnvironmentVariable("Path", "User")+";"+$env:PLTADDONDIR+"/8.12", "User")
4.5 ターミナルの再起動
設定したPathや環境変数は、現在のPowerShellセッションに即座には反映されません。
新しくターミナルを起動して、設定が反映されたPowerShellセッションを使う必要があります。
次の手順で、ターミナルを再起動します:
-
powershellの終了:
次のコマンドを実行して、powershellを終了します。exit -
ターミナルの起動:
[Windows+R]として[ファイル名を指定して実行]ダイアログを開き、wtと入力してターミナルを起動します。wt
5. WindowsでのRacketの起動と終了
5.1 Racket の起動
次の手順で、Racketを起動します。
ターミナルに次のコマンドを入力して、Racketを起動します:
racket
Racketの起動に成功すると、REPLが開始されて次のメッセージとプロンプトが表示されます:
> racket
Welcome to Racket v8.12 [cs].
>
5.2 Racketの終了
Racketをファイルを指定せずに起動すると、REPLが開始します。
REPLは、次の方法で終了できます。
-
EOF(Ctrl+D)の入力:
REPLはEOFが入力されると終了します。EOFは、Ctrl+Dで入力できます。Welcome to Racket v8.12 [cs]. > [Ctrl+D]キー押下 $ -
exit関数の実行:
exit関数を実行してRacketを終了します。関数として呼びだすため、()でくくる必要があります。Welcome to Racket v8.12 [cs]. > (exit) $ -
exitコマンドの実行:
XREPLでは,<コマンド>形式でコマンドを実行できます。終了コマンドは、,exitです。Welcome to Racket v8.12 [cs]. > ,exit $
おわりに
ここまでで、Racketのインストールおよび環境設定、起動と終了まで説明しました。
結果、Windows上で基本的なRacketプログラミングができるようになりました。
RacketのREPLを使えば、コマンドラインでRacketプログラムを実行し、インタラクティブなプログラミングを楽しめます
次は、実際にRacketでプログラミングをしてみましょう。
それでは、Happy Hacking!
技術用語と注釈
この記事で使用する技術用語を解説します:
-
Racket:
Schemeに基づいていて、教育、研究、実験的なプロジェクトに適しているく関数型プログラミング言語 -
REPL(Read-Eval-Print-Loop):
コマンドラインからコードを入力し、即座に結果を得られる対話的プログラミングを実現する環境 -
関数型プログラミング:
関数を中心に構築され、データの不変性と副作用の最小化を特徴とするプログラミングパラダイム -
DrRacket:
プログラミングの基本から上級テクニックまで学べるRacket公式の統合開発環境(IDE) -
raco:
Racketのパッケージの管理やプロジェクトのビルドなどをサポートするコマンドラインツール -
XDG Base Directory:
UNIX/Linuxにおいて設定ファイル、データファイルを保存先ディレクトリを定め、システムの整理と管理を容易にする標準ディレクトリ仕様 -
マクロシステム:
コンパイルがコード生成や構文拡張をし、プログラミング言語の柔軟性と機能性を強化するシステム -
winget:
Windowsでコマンドラインからアプリケーションのインストールや管理が行える公式パッケージマネージャー -
関数型プログラミング言語:
関数を第一級オブジェクトとして扱い、不変性や副作用の少ないプログラミングスタイルを実現する言語。 -
マクロシステム:
Racket において、開発者が言語の構文を拡張し、新しい構文をできる機能。 -
XDG Base Directory:
UNIX/Linux システムで使用される、ユーザーの設定ファイルやデータファイルを整理し保存するためのディレクトリ構造の規格。Windows ではこの規格に準じた管理を行なうために、XDG環境変数を設定します。 -
Dr Racket:
Racket プログラミング言語専用の統合開発環境。コードの編集、実行、デバッグを 1つのアプリケーション内で行なうことができ、プログラミング学習者からプロフェッショナルまで幅広くサポートします。 -
raco:
Racket のコマンドラインツールで、パッケージ管理やプロジェクトのビルド、プログラムの実行など、開発に関連する多様なタスクをサポートします。 -
winget:
Windows の公式パッケージマネージャー。コマンドラインからソフトウェアを直接インストールできるツールです。
参考資料
Webサイト
-
Racket公式Web:
Racketの特徴、使用法、ダウンロード情報を提供する公式サイト。 -
Racket Documentation:
Racketの全機能について詳細に説明する公式ドキュメント。初心者から専門家まで参考になる。 -
XREPL:eXtended REPL:
Racketの拡張REPLに関するガイド。機能拡張やカスタマイズ方法を詳解。 -
Racketの環境設定ファイル/ディレクトリまとめ:
設定ファイル、環境変数、ディレクトリ構造などのRacket用環境設定の解説。
本
-
Racket Guide:
Racketの基礎から応用までを分かりやすく解説した初心者向けのガイドブック。 -
How to Design Programs:
関数型プログラミングを核としたプログラム設計の技法を、初級から上級まで段階的に学べる教科書。 -
Structure and Interpretation of Computer Programs:
コンピュータサイエンスとプログラミングの原則に関する深い理解を提供する古典的なテキスト。論理的な思考とプログラミングスキルの向上に役立つ。 -
Beautiful Racket
Racketを用いて自分だけのプログラミング言語を設計・実装するための実践的なガイド。初心者も中級者も、プログラミング言語の作り方を段階的に学べる。
Discussion