最近はWeb上であらゆる機能を提供するような「Webアプリ」というものが流行ってきています。WordPressなどの環境でPHPを使って開発しても良いのですが、どうせなら他の言語も使いつつWebアプリの開発をしたいところです。
そこで、最近プログラミング界で話題の「Go言語」を自分のサーバー(Xserver:レンタルサーバー)で使えるようにできないかと考えまして、実際に導入してみましたのでその手順を紹介したいと思います。
Go言語とは
そもそもGo言語とは何なのか、軽く説明します。
シンプルで高速な新しい言語
プログラミング言語にはそれぞれ特性というものがあるわけですが、Go言語に関して一言で説明するとしたら「シンプルで高速な新しい言語」といったところでしょうか。
Go言語はPHPやPython、JavaScriptなどのスクリプト言語に比べたら比較的コーディングの難易度が高い気がしますが、その一方でシンプルなコーディングにすることができ、処理速度を非常に速くすることができる上に、慣れたら開発効率もぐんと上がると言われています。
Go言語は私たちの神様「Google」が開発した言語で、実際にYoutubeやメルカリ、クックパッドなどの有名なアプリで採用されています。
リリースされたの自体は2012年ですが(プログラミング言語の歴史としては新しい方) 多くのプログラマーから注目を浴びるようになったのは2015年以降のことかと思います。
実際にアメリカの「HackerRank」社が行った調査によると、Go言語は2020年にエンジニアが学びたい言語ランキングで1位を獲得することができているようで、将来性の高い言語として注目されています。
Webサービス・スマホ向けアプリ等に向いている
プログラミング言語というのはそれぞれ特性があって活躍できる場もものによって異なってくるわけですが、Go言語に関しては比較的Webサービスの開発に向いているとのことです。
また、AndroidやiPhone向けのアプリを作るとなった時にも、大いに活躍するとのことです。
ただし、家電などの機器の中に組み込んで動かすソフトウェアには向いていないとのことです。
Go言語をレンタルサーバー(Xserver)に導入する方法
それでは早速、Go言語をXserver等のレンタルサーバーに導入する方法を紹介します。VPSなどの仮想サーバー環境においては管理者権限が行使できるので環境を整えやすいのですが、Xserverなどのレンタルサーバーでは基本的に管理者権限が使えないので、こういった場面で行き詰まってしまう方は多いかと思います。
しかし実際は非常に簡単に導入することができるので、ぜひやってみてください
SSHに接続する
前提として、SSHが使える環境でないといけません。SSHはサーバーをインターネット経由でコマンドで遠隔操作するための通信プロトコルで、一般的には「ホストアドレス(サーバーのIP等)」「ユーザ名」「パスワード」、必要に応じて「秘密鍵」などがあれば、どんなOSからでも簡単に利用できます。
秘密鍵の設定方法などはレンタルサーバーによって異なっていたりするので、自分が使っているサービス+SSH+方法などの検索ワードで確認してみましょう。
ちなみにXserverではサーバーパネルから公開鍵&秘密鍵のペアを簡単に作ることができ、秘密鍵を自分のパソコンにダウンロードし、Tera TermなどのSSH接続サービスを用いれば簡単に利用することができます。
Go言語をダウンロードする
SSH接続できたところで、早速Go言語をダウンロードします。
上のリンクから公式Webサイトに飛び、下図に示す「Stable Versions」という見出しのところからLinux向けの安定板のダウンロードリンクを取得しましょう。

右クリックで「リンクのアドレスをコピー」を選択すれば簡単にリンクを取得できます。
そして、SSH上のユーザーホームディレクトリ(~/)にwgetコマンドを使ってダウンロードします。
$ cd ~/
$ wget https://go.dev/dl/go1.20.4.linux-amd64.tar.gz # コピーしたダウンロードリンク
上のコマンドを一行ずつ実行してください。そしたらホームディレクトリにダウンロードされます。
なおURLを貼り付けるとき、Ctrl + VではなくてShift + Insertというショートカットキーを使うようにしましょう。
そしたらダウンロードしたファイルを解凍します。
$ tar -xzvf go1.* # lsコマンド等でファイル名を確認し、それを入力
$ rm go1.* # 削除する
上の例だと横着して*(ワイルドカード)を使って省略していますが、できるだけちゃんとファイル名を入力するようにしましょう。 でもワイルドカードを使っても特定できるのであれば、使った方が絶対に楽です。go1.に続くファイル名なんて普通ありませんしね。
そして次の行で圧縮ファイルを削除しています。
最後にlsコマンド等で、「go」というフォルダが作成できていることを確認してください。
パスを通す
ダウンロードしたらもう後はパスを通すだけです。
$ vi ~/.bash_profile
上のようにviコマンドを使ってbashの設定をいじっていきます。viは「vim」の略ですが、vimテキストエディタはSSH通信の時に非常に使う場面が多いと思うので使えるようにしておきましょう。最初はちょっと癖が強いと感じるかもしれませんが。
そして、bash_profileに以下のような追記をします。
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$HOME/go/bin
export PATH
この記述をすることで、「go」とコマンドを入力するだけで「~/go/bin/go」と解釈してくれるようになります。
そして以下のコマンドで設定を更新します。
$ source ~/.bash_profile
$ go version
そして二行目のように「go version」とコマンドを入力してパスが通っている&Go言語が使えるか確認しましょう。
go version go1.~みたいに表示されたら大成功です。
Go言語を使ってみる
インストールして終わり、だとちょっとつまんないので、実際にGo言語を使ってみましょう。
$ mkdir sample
$ cd sample
$ vi hello.go
上のコマンドを一行ずつ実行して、sampleというディレクトリにhello.goというファイルを作成し、編集します。
package main // mainパッケージの宣言
import "fmt" //fmtモジュールをインポートする
func main() { //最初に実行される関数を定義
fmt.Println("hello world") //hello worldと出力
}
そしてこのような記述をしましょう。これはコマンドラインに「hello world」と出力するだけのプログラムですね。 保存してから、以下のコマンドを入力して実行してみます。
$ go run hello.go
go runコマンドによって指定のファイルをコンパイルして実行してくれます。まるでインタプリタ言語のように、実行ファイルを作らずにそのままソースコードを実行することができてお手軽ですね。
ただし以下のコマンドのように、事前にコンパイルして実行ファイル(windowsでいうexe形式)にしておけば、より素早く実行できます。これがコンパイル言語の良いところですね。
$ go build hello.go
このコマンドを実行することでビルドされ、同ディレクトリに「hello」という実行可能ファイルができるかと思います。 そしたら以下のように実行することができます。
$ ./hello
helloとそのまま入力してしまうとコマンドだと認識されてしまうので、ここでは./といった感じで相対パス形式で示す必要がありますね。
hello worldという出力だけなのでそこまで差がつかないと思いますが、それでも若干こちらの方が実行速度が速いですよね。 事前に機械語に翻訳しておくだけでここまで速くできるのです。
Web上から実行
これをどういう風にWeb開発に取り込もうかといったところですが、ここではなんちゃってCGIみたいなのをPHPで作ってみます。(WordPress環境です)
まず、public_html以降(Web上に公開しているディレクトリ)に、適当にPHPファイルを作ります。
<?php
$t = $_GET["t"];
$go_file = '~/sample/text_output'; //実行するファイルのパス
$arg = "'{$t}'";
$cmd = implode(' ',[$go_file,$arg]);
exec($cmd,$result);
echo $result[0];
そして、以下のようにしてsampleディレクトリにtext_output.goというファイルを作ります。
$ vi ~/sample/text_output.go
package main
import (
"flag"
"fmt"
)
func main() {
flag.Parse()
arg := flag.Arg(0)
fmt.Printf("入力値は:%s\n", arg)
}
これはコマンドライン上から取得した引数をそのまま出力するシンプルなプログラムです。
$ go build ~/sample/text_output.go
このようにしてビルドした後に、
$ ~/sample/text_output "Hello World"
というように実行してみましょう。そしたらHello Worldと出力されるはずです。
そして、Webページ上から先ほど作ったtest.phpに、t=Hello Worldという引数をつけて(test.php?t=Hello Worldのように) アクセスしてみてください。
そしたらすぐにHello Worldと表示されるはずです。
このようにして、引数を受け取ってそれをWebページ上に表示するというプログラムができました。これを応用すればWebアプリなんかも作れるようになるでしょう。
以上、Xserver(レンタルサーバー)で始める、Go言語入門でした。私もまだGo言語については全然理解していないので、これから勉強していきたいと思います。