2024/10/24(木) [n年前の日記]
#1 [crystal][prog] Crystalを試用
今頃になって知ったのだけど、2024/10/01〜03頃に、Twitter上で、Rubyと静的型付けの話題で色々揉めていたらしい。Rubyの神様が激怒(?)していたようで…。さておき、関連情報をググってたら「Crystal使えばええやん」という話があった。何だソレ?
どうやら、Rubyと似た感じでソースを書ける、Crystalという言語があるらしい。
_The Crystal Programming Language
_The Crystal Programming Language (ja)
_crystal-lang/crystal: The Crystal Programming Language
_Windows (Preview) - The Crystal Programming Language
_トップページ | Introducing Crystal Programming Language - Your awesome subtitle
気になったので、Windows10 x64 22H2上で試用してみた。
どうやら、Rubyと似た感じでソースを書ける、Crystalという言語があるらしい。
_The Crystal Programming Language
_The Crystal Programming Language (ja)
_crystal-lang/crystal: The Crystal Programming Language
_Windows (Preview) - The Crystal Programming Language
_トップページ | Introducing Crystal Programming Language - Your awesome subtitle
- インタプリタではなくコンパイラ。実行形式(.exe)を生成できる。
- 静的型付け言語。「Rubyに静的型付けがあれば」と言い出す輩はコレでも使っとけ、と言われがち?
- Linux と Mac を念頭にして作られている雰囲気。そこらへんもちょっと Ruby っぽい…。
- Windows版は鋭意開発中ではあるけれど、一応プレビュー版が存在していて使えないこともないらしい。
- Windows上での利用時は、Visual C++ (Visual Studio、cl.exe) が必要。MinGW (gcc.exe) はサポートしてない。
気になったので、Windows10 x64 22H2上で試用してみた。
◎ インストール :
一般的には Scoop なるツールを利用してインストーする事例が多く紹介されてるようだけど、以下からバイナリを入手することもできる。
_Releases - crystal-lang/crystal
インストーラ版とポータブル版があるけれど、ポータブル版を使ってみることにした。crystal-1.14.0-windows-x86_64-msvc-unsupported.zip を入手して解凍。今回は D:\Dev\Crystal\ に置いた。
Crystalのインストール場所を、環境変数PATHに追加する。今回、cr_use.bat というBATファイルを書いて、使いたくなった時に該当BATファイルを呼び出して使うようにする。
動作には、Visual C++ (cl.exe) が必要。自分の環境は Visual Studio Community 2022 をインストールしてあるので、その点は問題無し。
_Releases - crystal-lang/crystal
インストーラ版とポータブル版があるけれど、ポータブル版を使ってみることにした。crystal-1.14.0-windows-x86_64-msvc-unsupported.zip を入手して解凍。今回は D:\Dev\Crystal\ に置いた。
Crystalのインストール場所を、環境変数PATHに追加する。今回、cr_use.bat というBATファイルを書いて、使いたくなった時に該当BATファイルを呼び出して使うようにする。
@echo off set CRPATH=D:\Dev\Crystal set PATH=%CRPATH%;%PATH% echo Install Path : %CRPATH% echo Crystal enable.
動作には、Visual C++ (cl.exe) が必要。自分の環境は Visual Studio Community 2022 をインストールしてあるので、その点は問題無し。
◎ 使い方 :
以下で Crystalコンパイラの使い方が紹介されてる。
_コンパイラの使い方 - Crystal
Visual C++ (cl.exe) が利用できる状態じゃないと使えないので…。スタートメニューから、「x64 Native Tools Command Prompt for VS 2022」を選んで起動。DOS窓が開く。これで cl.exe が利用できる状態になる。
先ほど作成した cr_use.bat を実行。これで、crystal.exe にPATHが通ったはず。
バージョンを確認。
任意のフォルダで、hello.cr を作成。内容は以下。文字列を出力するだけ。
実行してみる。crystal run hoge.cr でお試し実行ができる。
ビルドして実行形式を作ってみる。crystal build hoge.cr でビルドできる。
以下のファイルが作成された。
hello.exe を実行してみる。
実行できた。
これで、Windows上でも Crystal を動かして実行ファイルを作成することができそうだと分かった。
_コンパイラの使い方 - Crystal
Visual C++ (cl.exe) が利用できる状態じゃないと使えないので…。スタートメニューから、「x64 Native Tools Command Prompt for VS 2022」を選んで起動。DOS窓が開く。これで cl.exe が利用できる状態になる。
先ほど作成した cr_use.bat を実行。これで、crystal.exe にPATHが通ったはず。
バージョンを確認。
> crystal -v Crystal 1.14.0 [dacd97b] (2024-10-09) LLVM: 18.1.1 Default target: x86_64-pc-windows-msvcCrystal 1.14.0 を呼び出せている。
任意のフォルダで、hello.cr を作成。内容は以下。文字列を出力するだけ。
puts "Hello world ! Hello Crystal !"
実行してみる。crystal run hoge.cr でお試し実行ができる。
> crystal run hello.cr Hello world ! Hello Crystal !
ビルドして実行形式を作ってみる。crystal build hoge.cr でビルドできる。
crystal build hello.cr
以下のファイルが作成された。
gc.dll hello.cr hello.exe hello.pdb iconv-2.dll
hello.exe を実行してみる。
> hello.exe Hello world ! Hello Crystal !
実行できた。
これで、Windows上でも Crystal を動かして実行ファイルを作成することができそうだと分かった。
◎ shardsを使おうとしてハマった :
Crystal には shards というパッケージマネージャが同梱されている。これを使うと、プロジェクトの管理が楽になるらしい。shard.yml というファイルに記述された内容に基づいてアレコレしてくれるらしいが…。
_shards コマンド - Crystal
例えば、crystal init app hoge と打ち込めば、プロジェクトの雛形を作成してくれるのだけど。
この状態で shards を使えばビルドができるのかな、と思いきや…。
「Symlinks を使うから開発者モードにするか権限を上げろ」と言ってきた…。
以下を眺めると、非開発者モードで利用できるようにするのは難しい、と言っているように見えた。
_Windows: A required privilege is not held by the client - Issue #556 - crystal-lang/shards
仕方ないので、一時的に Windows10 x64 22H2 の開発者モードを有効にして試してみた。スタートメニュー → 設定 → 更新とセキュリティ → 開発者向け → 開発者モード、をONに。
_Windows 10で開発者モードにする - Windows 10 Tips | iPentec
shards が動くようになってくれた。
shards build と打ったら、bin/ ができて、中に実行ファイルが生成された。bin/ の中は以下。
でもまあ、入門時は使わなくても良さそうだし…。開発者モードはOFFに戻しておいた。
_shards コマンド - Crystal
例えば、crystal init app hoge と打ち込めば、プロジェクトの雛形を作成してくれるのだけど。
> crystal init app hello-cr create D:\home\prg\crystal\helloworld\hello-cr\.gitignore create D:\home\prg\crystal\helloworld\hello-cr\.editorconfig create D:\home\prg\crystal\helloworld\hello-cr\LICENSE create D:\home\prg\crystal\helloworld\hello-cr\README.md create D:\home\prg\crystal\helloworld\hello-cr\shard.yml create D:\home\prg\crystal\helloworld\hello-cr\src/hello-cr.cr create D:\home\prg\crystal\helloworld\hello-cr\spec/spec_helper.cr create D:\home\prg\crystal\helloworld\hello-cr\spec/hello-cr_spec.cr Initialized empty Git repository in D:/home/prg/crystal/helloworld/hello-cr/.git/
この状態で shards を使えばビルドができるのかな、と思いきや…。
> cd hello-cr > shards Shards needs symlinks to work. Please enable Developer Mode, or run Shards with elevated rights: https://learn.microsoft.com/en-us/windows/apps/get-started/enable-your-device-for-development
「Symlinks を使うから開発者モードにするか権限を上げろ」と言ってきた…。
以下を眺めると、非開発者モードで利用できるようにするのは難しい、と言っているように見えた。
_Windows: A required privilege is not held by the client - Issue #556 - crystal-lang/shards
仕方ないので、一時的に Windows10 x64 22H2 の開発者モードを有効にして試してみた。スタートメニュー → 設定 → 更新とセキュリティ → 開発者向け → 開発者モード、をONに。
_Windows 10で開発者モードにする - Windows 10 Tips | iPentec
> shards Resolving dependencies Writing shard.lock > shards check Dependencies are satisfied > shards version 0.1.0 > shards build Dependencies are satisfied Building: hello-cr
shards が動くようになってくれた。
shards build と打ったら、bin/ ができて、中に実行ファイルが生成された。bin/ の中は以下。
gc.dll hello-cr.exe hello-cr.pdb iconv-2.dll
でもまあ、入門時は使わなくても良さそうだし…。開発者モードはOFFに戻しておいた。
◎ 余談。開発者モードの罠 :
開発者モードにしたら、普段使ってる BATファイルが実行できなくなってしまった。「\Microsoft の使い方が間違っています。」と表示されてしまう。
BATファイル内のラベルが小文字で書かれていたのがよくなかったらしい。大文字に修正したら動いてくれた。そういうものなの…?
ちなみに、自分でBATファイルを書くときは、昔ながらの流儀でラベルは大文字にしているのだけど、他の方が書いたソレをそのまま持ってきて使っていたものだから…。とりあえず、非開発者モードでは、ラベルが小文字でも動いてしまうようだなと…。
BATファイル内のラベルが小文字で書かれていたのがよくなかったらしい。大文字に修正したら動いてくれた。そういうものなの…?
ちなみに、自分でBATファイルを書くときは、昔ながらの流儀でラベルは大文字にしているのだけど、他の方が書いたソレをそのまま持ってきて使っていたものだから…。とりあえず、非開発者モードでは、ラベルが小文字でも動いてしまうようだなと…。
[ ツッコむ ]
以上です。