LED通信事業プロジェクト エンジニアブログ

F#でラズパイを動かす(2)

必須アプリのインストール

記事更新日 2022年2月8日


はじめに

.NET対応言語なのに全く影の薄いF#を盛り上げようと、F#を使って今勢いのあるRaspberry Pi(通称ラズパイ)を動かそうというブログ企画の第二弾になります。プログラミングを触ったことがある人向け、になっておりますので、説明が省かれている部分も多いかと思いますがご了承ください。

前回は、.NETでラズパイが動かせるようになった歴史と、関数型言語であるF#の特長などを説明しました。今回は、.NETをラズパイ上で動かすための準備について説明したいと思います。おおよその工程はF#独自ではなく.NET共通となりますのでC#やVB.NETでラズパイを動かす場合でも同じことが必要となります。また、私もそうですが、.NETをやっていた人は基本的にWindowsがメインでLinux系OSにあまり詳しくない人が多いと思います。ですから、できるだけ「Windowsしか触ったことがない人でも」実行出来るように書いていきたいと思います。

準備するもの

  • Raspberry OSがインストールされたRaspberry Pi本体 (3B又は4)
  • Raspberry Piがインターネットに接続していること
  • Windows PC(ラズパイと同じLANにいること)

対応ラズパイは現行機種である3B系、または4とさせて頂きます。また、ラズパイとWindows PCは、同じLAN内で接続されている(お互いの機器がネットワーク上で見える)状況にして下さい。というのも、殆どの操作をWindows PC側で行い、ラズパイ側は可能な限りリモートで操作するという形で進めるからです。もちろん、ラズパイ単体でも全ての操作できますが、F#のコードはWindows PCで書く方が便利なため「操作は極力Windows側からする」とした方が楽なのです。

Raspberry OS(ラズパイ標準OS)のインストール方法は、星の数ほどサイトがありますのでそちらを検索して頂ければと思います。また、Raspberry OSがインストールできている方であれば、ラズパイをインターネットに繋げるのは容易なはずです。操作はWindowsと変わりません。WiFiであればSSIDを選んでパスワードを入力するだけですし、LANケーブルであれば挿すだけです。後はGUI上で全て完結します。

ラズパイへリモートでコマンドを打つ

ラズパイのOSはLinux系のため、GUIがメインのWindowsと異なり操作の多くを「コマンド」で行います。CLIというやつです。私を含むWindowsメインの人にっとってコマンドで操作するのは面倒で慣れないものです。しかし、SSHという機能を使うことによりWindowsからラズパイに簡単にコマンドを送れるため、CLIはリモート操作には向いているというメリットがあります。例えば、ハードウエアが近くに存在しないことが前提である「サーバーに対する操作」でも、このSSHがよく使われます。今回はWindowsからSSHを使ってラズパイに接続する方法について説明します。

まず、ラズパイ側でSSH接続を有効にする必要があります。これは必ずラズパイ側で操作してください。 メニューから[設定]-[Raspberry Piの設定]を選択すると設定ウインドウが開きます。そこには「インターフェース」というタブがありますので、そこを選択してください。すると、様々な機能の有効-無効を選択できるタブが開きます(図1)。 SSHは上の方にありますので、[有効]を選んで[OK]を押せば設定は有効になります。なお、SSHを有効化するついでに、その下にあるVNCI2Cも有効にしておいてください。次回以降に使います。

fig.1
図1: SSH設定画面

Windows側ではSSH接続をする必要があります。以前はSSH接続をするためにTera Termなど別の通信アプリを使う必要がありましたが、今のWindowsはSSHに標準で対応しています。Windowsでコマンドを打つ場合、コマンドプロンプトまたはWindows PowerShellのいずれかを使用する場合が多いかと思います。しかし、私は別のアプリを使用することをお勧めしたいです。それはWindows Terminalというアプリです。Microsoftが新しく作ったコマンド入力用のアプリで、コマンドプロンプトとPowershellの両方を合わせたツールです(図2)。Terminalでは、使用時にコマンドプロンプトとPowershellのどちらを使うかを選択できます。また、タブや画面分割で表示できたり、細かい設定ができたりと、Windowsではちょっと不便だったコマンド入力を便利にするために開発されたアプリです。マイクロソフトストアから入手できますので、興味のある方はダウンロードして下さい。もちろん無料です。細かい操作方法などは@ITのこちらの記事が参考になると思います。

fig.1
図2: Windows Terminal

ラズパイへの接続には、ラズパイに設定したIDとパスワードが必要です。ラズパイの標準ユーザー名は"pi"で、意識して変更していない限りpiのままですので、おそらくはその状態で使っている方が多いと思います。パスワードはRaspberry OS初期セットアップで設定しているはずですので、それを使います。まず、WindowsからSSHにてPiというユーザー名でログインするためには、Windowsで次のコマンドを打ちます。

ssh Pi@<ラズパイのIPアドレス>

例えば、ラズパイのIPアドレスが192.168.0.1だった場合、コマンドを

ssh Pi@192.168.0.1

と打てばいいわけです。後は、暗号キーがどうこうとか、パスワードとかを聞いてくるので、画面の指示(英語ですが・・・)に従って入力していけばラズパイに繋がります。接続に成功すれば、ラズパイのコマンドウインドウ(LXTerminal)を開いたときと同じように、次のようなコマンド待ち状態に変化します。

pi@raspberrypi:~ $

これでラズパイに直接コマンドを打っているのと同じ状態です。こうなれば、様々なコマンドがWindowsから実行することが出来るようになります。試しにifconfig(Windowsでいうipconfig)とコマンドを打ってみて下さい。Windowsの情報ではなく、ラズパイのネットワーク情報が表示されるはずです。

ラズパイへ.NETのインストール

Windows10や11には.NETアプリを動かすためのフレームワークが標準でインストールされており、特にユーザーが何かをインストールすることなく.NETで作ったアプリを使うことができます。しかし、ラズパイで.NETのアプリを動かすには、ラズパイへ.NETのフレームワークをインストールするか、アプリ自体に.NETを動かすためのフレームワークを添付させる必要があります。前者は最初に手間がかかりますが後が楽になり、後者は最初の手間は省けますが、毎回ファイルが大きくなります。今後も沢山の.NETアプリを開発するという前提(建前?)ですから、今回は前者である .NET(のフレームワーク)のインストールを行いたい と思います。実際、今後のデバッグという面ではその方が楽ですので。

.NET(フレームワーク)のインストールは、以前ならマイクロソフトのサイトからラズパイ用.NETを探してきて、バージョンが合うものをダウンロードして・・・と結構面倒な手順があったのですが、いまはマイクロソフトの公式サイトにあるとおり、次の4行のコマンドを実行するだけです。これで、最新バージョンがダウンロードされ、インストールされます。もちろん、SSHで接続したWindows PCから行うことが出来ます。

curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --channel Current echo 'export DOTNET_ROOT=$HOME/.dotnet' >> ~/.bashrc echo 'export PATH=$PATH:$HOME/.dotnet' >> ~/.bashrc source ~/.bashrc

Windowsにおいては.NETは常に最新バージョンにしてほぼ問題ない、というかOSのバージョンアップに伴い自動でインストールされ自動でアップデートされてしまうため、もはやユーザーがインストールされた.NETのバージョンを確認する方法を殆どの人が知らない状態で、つまりはバージョンを意識する必要がほぼありません。しかし、ラズパイの.NETはそうではありません。細かいバージョンは問題ありませんが、大きなバージョンは合わせてないと動かない場合があります。例えば、Verion.6.xを入れても、Version.5.xで作られたアプリは動きません。いや、通常、この手のものは後方互換があって動きそうなものだし、検索しても動かないなんて情報は無いんですが、実際に実行すると動かない・・・ というわけで、インストールしている.NETのバージョンは常に意識する必要があります。ラズパイにインストールされた.NETのバージョンを確認するには次のコマンドを入れてください。(ちなみに、このコマンドはWindowsでも使えます。)

dotnet --version

これを書いている2022年1月末だと上のコードでインストールされるのは.NET6.0.101ですので、このコマンドを打つと6.0.101と表示されます。尚、このコマンドを打ってバージョンが表示されない場合、インストール、もしくはパスの設定が上手くいっていないことを意味します。また、特定バージョンをインストールしたい方は前述の公式サイトをご確認頂ければと思います。今後このブログは.Version.6.0.xxx(.NET6)がインストールされていることを前提に進めていきます。

Visual Studioの導入

さて、ここまできたらF#のコードを書いて何かを動かしたいところですが、コードを何を使って書けば良いでしょうか?一般に、プログラミングのコードを書くのに何を使っても良いとされています。それこそ、Windowsのメモ帳でも書けますし、かつては秀丸などのテキストエディタでコードを書いている人も多くいました。しかし、今はIDE(統合開発環境)と呼ばれるアプリケーションを使って書くことが一般的です。IDEはコードを書くための支援機能が沢山実装されたアプリです。図3のように自動で次の候補を出してくれたり、エラーを指摘、訂正してくれたりします。そのため、素のテキストエディタよりもずっと楽に、しかも安全にコードを書くことが出来ます。.NET(C#やVB.NET、F#)のコードでは、主に次に挙げる二つのIDEが使われています。どちらもMicrosoft製ですが、その性質は少し異なります。

fig.1
図3: IDEによる変換候補の例

一つ目はVisual Studio。これは、.NETより前の1997年から存在するIDEで、Officeと並びMicrosoftを代表するアプリケーションです。とても高機能で、様々な言語に対応していて、個人向けから大規模チーム向けまで、そしてローカルアプリからクラウドアプリ開発まで、ありとあらゆる事ができます。ただし、アプリケーションとしてはとてつもなくサイズが大きく、インストールには最小構成でも数GB必要で、動作時にはメモリも食うため、ある程度の性能をもつPCが必要です。(とはいえ、ゲームやCAD/CGアプリほどではありませんので、Atom系、eMMC、メモリ4GBみたいなスペックでなければ動きますが。)個人や小規模企業向けの無料版から、高価なエンタープライズ版まで存在します。基本的にWindows対応ですがmacOS用Visual Studio for Macという製品も存在します。

もう一つは、最近(2015年)登場したVisual Studio Code(VSCode)です。WindowsだけでなくmacOSやLinuxなど様々なOSに対応しています。なんと、ラズパイでも動きます。また、C#やF#だけでなく、JavaScriptやPython等様々な言語に対応していて、さらにプラグインによって様々な機能を追加することができます。しかもオープンソースなのですべて無料。こちらは正確にはIDEではなく「テキストエディタ」に分類されるのですが、IDEと言っていいほどの多機能でありながら、テキストエディタのように軽いという特長を持ちます。今、開発者に一番使われているIDEといっていいと思います(実際、このブログもVSCodeで書かれています)。

こういう紹介の仕方をしたので、VSCodeでF#を書くのかな?と思われたかも知れませんが、やっぱりF#を書くのであればVisual Studioが圧倒的に便利です。VSCodeは、インストール段階からある程度の知識が無いと開発環境が構築できません。つまり、スタートラインに到達しません。ですから、様々な知識を持つプロの開発者にとってはとても良いツールではあるものの、初心者にはちょっとハードルが高いツールなのです。一方Visual Studioは、もの凄く高機能であるものの、実はクリックしていくだけで誰でも簡単に開発をスタートすることが出来ます。もちろん、全ての機能を使いこなすとなると相当な知識が必要となります(かく言う私も使いこなせていません)が、別にラズパイで動かすアプリを作る程度であれば使いこなす必要などありません。今回はWindows PCを使うという前提ですし、より簡単に始められるVisual Studioを使用して開発を進めたいと思います。

Visual Studioのインストール

Visual Studioにはいくつかのバージョンがあります。最初期を除き、Visual Studioのバージョンは全て「西暦」の番号が付いていて、現在使われている「現役」のバージョンは、一つ前の「2019」か最新の「2022」です。見た目は殆ど同じですが、.NET6を扱えるのは最新の「2022」の方なので、2022をインストールして下さい。

Visual Studio2022のインストールはこちらから。

Visual Studioには"Community"、"Professional"、"Enterprise"の三バージョンが存在します。後ろ二つは、ある程度の規模の人数で開発するためのツールであり、個人レベルで開発する人は、迷わず"Community"を選んで下さい。Installerがダウンロードされますので、それを実行し指示に従って下さい。インストールするのはVisual Studio Community 2022ですので、お間違いのないように。

Visual StudioはCommunityバージョンだとしても、全てをインストールするとなるとかなりのサイズ(10GB超)になりますので、インストールする部品(コンポーネント)を選択し必要なものだけをインストールします。F#に必要なものは、図3のように、.NETデスクトップ開発を選んで、オプションのF#デスクトップ言語のサポートを選ぶことで全てインストールされます。C#とVB.NETはオプションではなく強制インストールですので、そこに言語の立場の差を感じますが・・・

fig.1
図4: F#インストールのための最小限コンポーネント
もちろん、余裕があればその他のコンポーネントを選択肢インストールしても問題はありません。ちなみに、隣にある「.NETによるモバイル開発」はAndroidやiOSで動くアプリ開発のためのコンポーネントでF#は対応していますが、下にある「ユニバーサルWindowsプラットフォーム開発」はWindowsのストアアプリ開発用なのに何故か(というか当然?)F#は対応していないとか、いろいろとあります・・・ 後からでも追加・削除は自由にできますので、気になったものを入れてみるという感覚で良いと思います。

尚、インストールはPCの性能や通信速度によってかなりの時間を必要としますので、終了するまで暫くお待ちください。

WinSCPのインストール

さて、Visual Studioでラズパイ用のアプリを開発したとして、その開発したファイルをWindowsからラズパイに送らないとアプリを実行出来ません。Windows PCとラズパイの間でファイルをやり取りする方法は様々ありますが、私が一番簡単な方法としてお薦めしたいのはWinSCPというアプリを使うことです。WinSCPはホームページのアップロードなどでも使われている非常に有名なWindowsアプリであり、このアプリをラズパイとファイルのやり取りにも使うことが出来ます。

WinSCPのダウンロードはこちらから。

使い方を改めて説明する程難しいツールではありません。例えば、こちらのページ参考にインストールや設定を行ってください。接続設定ですが、ラズパイのユーザー名が「pi」であった場合、図4のように設定すれば繋がります。

fig.1
図5: WinSCPの接続設定

尚、転送プロトコルの欄にある「SFTP」とは「SSHをつかったFTPプロトコル」のことなので、ラズパイのSSHを有効にしておく必要がありますのでご注意下さい。(まだ有効にしていない方はページの上の方を見て下さい。)

おわりに

これで、Windows PCとラズパイに最低限必要なインストールができました。.NETのインストールは、かつてはWindowsしか知らない人にとって面倒かつで分かりにくいものでした。しかし、今はコマンドのコピペだけで簡単にインストール出来るようになったので、ラズパイで.NETを始めるハードルはかなり下がったと思います。

次回(以降)は、いよいよF#のコードを書いて、お約束の「Hello World」や「LEDの点滅(通称Lチカ)」をやっていきたいと思います。