mieki256's diary



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上で試用してみた。

インストール :

一般的には 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ファイルを呼び出して使うようにする。

@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が通ったはず。

バージョンを確認。
> crystal -v
Crystal 1.14.0 [dacd97b] (2024-10-09)

LLVM: 18.1.1
Default target: x86_64-pc-windows-msvc
Crystal 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 と打ち込めば、プロジェクトの雛形を作成してくれるのだけど。
> 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ファイルを書くときは、昔ながらの流儀でラベルは大文字にしているのだけど、他の方が書いたソレをそのまま持ってきて使っていたものだから…。とりあえず、非開発者モードでは、ラベルが小文字でも動いてしまうようだなと…。

以上です。

過去ログ表示

Prev - 2024/10 - Next
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project