20200318のMacに関する記事は10件です。

MACのvimでコピーができるようになるまで

最初に

mac標準のvimで、文章を書こうとしたら、なぜかyyでコピーもできなかった。。。
ググって、下記を見つけた。
macのvimでクリップボードにコピーを使いたい!!

なるほど、homebrewでインストールすればいいのかと思い、とりあえず実行。

これだけやれば、vimでコピーはすぐ使えるようになった!

brew update
brew install vim 

以上!コピーできるようになった!良かった!

補足

情報元の方が書いた方法だと、よく考えたらアップデート対応が面倒だな〜と思い、他に方法がないか探していた。
で、下記を見つけた。
OS X に Vim を Homebrew でインストールして vi で起動する - Qiita
オプション入れたらいけるのかーと思い、トライしてみた。

brew install vim --with-override-system-vi

でも、このコマンドをやってみると、下記のエラーが出ていた。

Error: invalid option: --with-override-system-vi

なんでだろーと思い、調べてたら、下記を発見。
brew install got Invalid option error #817

まあ、みんな気になっていたみたいだけど、
結局のところ、オプションなしで入れてみて、同じような結果になることがわかった。
オプションがデフォルトになって、インストールが簡単になったのかな。
上記のコマンドの結果、最終的なvimとしては、下記のようにリンクで参照されていた。OK。

$ which vim
/usr/local/bin/vim
$ ls -la /usr/local/bin/vim 
lrwxr-xr-x  1 user  admin  30  3 18 20:19 /usr/local/bin/vim -> ../Cellar/vim/8.2.0350/bin/vim

環境

$ brew --version
Homebrew 2.2.10
Homebrew/homebrew-core (git revision d7e71; last commit 2020-03-17)
Homebrew/homebrew-cask (git revision 382de; last commit 2020-03-18)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MacからUbuntu18.04へのリモート接続設定備忘録(UFW設定方法付き)

MacからUbuntu18.04へのリモートデスクトップ接続の設定方法をいつも忘れて困ってしまうので備忘録メモとしてまとめます。

検証環境

Mac: macOS 10.14.6 Mojave
Ubuntu: Ubuntu 18.04.4 LTS

環境設定 @ Ubuntu

まずはUbuntu側で設定します。

Vinoのインストール

画面共有(リモートアクセス)を有効にする為に、Vinoをインストールします。

sudo apt install -y vino

Vinoの通信を暗号化するとMacと通信出来ない不具合が有るので通信の暗号化を無効化します。

gsettings set org.gnome.Vino require-encryption false

sudoを付けている情報もネットに有りますが、正しくはsudoを付けません。

sudoを付けるとエラーが出ます。
 $ sudo gsettings set org.gnome.Vino require-encryption false
[sudo] user のパスワード: 

(process:3278): dconf-WARNING **: 23:34:23.211: failed to commit changes to dconf: 接続が閉じています

参考: デスクトップを共有する

画面共有の設定

設定画面から共有/画面共有(S)順にクリックします。必ずパスワードを要求するを選択し、パスワードを設定します。

screen_share.png

UFWの設定

Ubuntuのファイアウォールの設定を行います。Ubuntu18にはUFW(Uncomplicated Firewall)というファイアーウォールがデフォルトでインストールされています。初期状態では非アクティブ状態なので、そのまま使用できますが、本記事ではファイアーウォールの設定を行います。

UFWの状態を確認

Desktop版の場合、初期状態では非アクティブ状態です。

$ sudo ufw status
状態: 非アクティブ

UFWを有効化

Uncomplicated Firewallを有効化します。

 $ sudo ufw enable
ファイアウォールはアクティブかつシステムの起動時に有効化されます。

状態を確認します。

$ sudo ufw status 
状態: アクティブ

To                         Action      From
--                         ------      ----

ポート5900番を開放

sudo ufw allow 5900

設定後の状態を確認します。IPv4, IPv6両方のルールが登録されます。

$ sudo ufw status | grep 5900
5900                       ALLOW       Anywhere                  
5900 (v6)                  ALLOW       Anywhere (v6)
  • 設定内容の格納先
    • IPv4: /etc/ufw/user.rules
    • IPv6: /etc/ufw/user6.rules

参考: ufwの基本操作

mDNSの設定

<USER_NAME>@<HOST_IP>ではなく、同じネットワーク上のホストへの接続なら<HOST_NAME>.localで接続出来る様にするために、mDNS(multicast DNS)をインストールします。Ubuntuではavahi-daemonをインストールします。

sudo apt install -y avahi-daemon

参考: mDNSを設定して、いちいちIPアドレスを打ち込むのをやめよう。

環境設定 @ Mac

続けてMac側の設定を行います。Mac用のリモートデスクトップソフトは標準搭載の物を用います。

接続設定

Finderを起動し、command + Kを同時に押すと以下の様なウィンドウが表示されます。上側の入力欄にvnc://<HOST_NAME>.local:5900と入力し、接続をクリックします。

server connenct

ログイン画面が表示されるので画面共有の設定で設定したパスワードを入力し、サインインをクリックします。

login.png

ログインに成功するとデスクトップが表示されます。

desktop.png

まとめ

Macからサーバー用途に用いているUbuntuデスクトップへのリモート接続の設定方法をいつも忘れてしまい、再設定時にあちこち探し回って設定していたため、本記事では備忘録メモとしてまとめました。今後は備忘録メモも記事として投稿していこうと思います。

Reference

http://imamachi-n.hatenablog.com/entry/2018/04/28/211147

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

オーディオファイルのメタ情報を参照する

オーディオファイルのメタ情報を手軽に参照したいなと思ったとき、SoX (Sound eXchange) が簡単に利用でき便利です。元々 SoX はオーディオファイルの変換を主な機能とするコマンドラインツールですが、他にも様々な機能を提供しています。

macOS を利用している方なら Homebrew からインストールできます。

$ brew install sox

試しに次の URL で公開されている MP3ファイルのメタ情報を参照してみると、以下のようにメタ情報を参照することができます。Sweeping Broom Shorter Sounds | Effects | Sound Bites | Sound Clips from SoundBible.com

$ sox --info sweeping_straw_broom-mike-koenig.mp3

Input File     : 'sweeping_straw_broom-mike-koenig.mp3'
Channels       : 2
Sample Rate    : 44100
Precision      : 16-bit
Duration       : 00:00:07.81 = 344465 samples = 585.825 CDDA sectors
File Size      : 312k
Bit Rate       : 320k
Sample Encoding: MPEG audio (layer I, II or III)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

mac chainercv install failed

environment

  • Macos Catalina 10.15.1
  • python 3.6.8
  • pip 20.0.2

installation

$ pip install -U numpy
$ pip install chainercv

参考まで

error

Building wheels for collected packages: chainercv
  Running setup.py bdist_wheel for chainercv ... error
.
.
.
error: command 'clang' failed with exit status 1
.
.
.

solution

$ xcode-select --install
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Mac上のファイルにAndroidからアクセスするには

Mac上のファイルにAndroidからアクセスしたかった話

ことの発端はHTMLであるページを作っていた時の話。

当然PCでHTMLファイルを記述していたわけだが、そういや公開したらスマホでも見るかもしれないな(というか多分そっちのほうが多いだろう)と思い、(私は手持ちの端末がAndroidなので)ファイル共有して開こうと思った…

が!

私は保守や作成時にわかりやすいよう、ファイル(特にCSS)を大量に分割して記述することが多く、ファイル転送がめんどくさい!
(いや、がんばれ)

ということで、手持ちの環境でファイル共有ができないかと模索してみた。

FTP

無知な私が最初に思いついたのはFTP。スマホのファイルマネージャーに簡単にFTPが作れる物があったからだ。

FTPとは、File Transfer Protocol、ファイル転送プロトコルのこと。
プロトコルっていうのは、Wikiによれば

プロトコルまたはプロトコールとは、複数の者が対象となる事項を確実に実行するための手順について定めたもの。

もともとは「人間同士のやりとり」だけに関する用語であった。戦間期の学術的批判を経て、情報工学分野でマシンやソフトウェア同士のやりとりに関する取り決め(通信規約)を指すためにも用いられるようになった。

ーーWikipedia

ということで、つまりは手順や取り決めと言ったところ。

そこで、無知な私が(2回目)FTPについて調べてみると、基本的にFTPや、その類似であるSFTP、FTPSなどはサーバー、クライアント間でファイル共有をする時に使うもの。

私がやりたいのはスマホからアクセスしたいので、もしかしたら深く調べればできるのかもしれないが、今回は断念。

ケーブル経由

そりゃあもちろんケーブル経由も検討しましたが、それはなんかチガウので却下。

あまり調べてはいないが、ケーブル接続したら自動でファイルの同期処理とかもできるかもなあと思った。

macOSのファイル共有

macにそんな機能ないかななんて、設定で探したら"共有"(Sharing)なんていうおあつらえ向きの設定項目があるじゃないですか。

検索のSS
言語設定が英語で申し訳ない。

これを使ってみよう!としたのだが、ファイル共有(File Sharing)とかの項目はあるのだが、どう考えてもアドレスがandroidからアクセスできるようなものではない…

afb://やsmb://から始まるものであった。

調べてみれば、AFPはApple File Protocolというもので、名前からしてApple独自のものだろう。

SMBはServer Message Blockというものらしく、Windows間でのファイル共有を行うためのものらしい。

…ちっがーう!

Android側を頑張ってみる

mac側で色々調べてみたが、どうにもうまく行かないものなので、Androidをどうにか対応できないか考えてみることにする。

SMB?

これ気になる。
Windows間でのファイル共有ができるのならばAndroidは対応しているのでは…?

という考えに至り、ちょっと探してみたところ、ありました。

私は今までFile Manager HDという、ネットワーク探査などができるファイルマネージャーが使いやすくそれを使っていたのだが、残念ながらSMBには対応していなかった。

そこで見つけたのがCx File Explorer
UIが非常にFMHDに似通っているのでそそくさと乗り換え。

ちょっと使ってみたところ、UXも上々。メモリ1.8GBのスマホでも動いたので良いですねこれ。

さて本題、SMBに接続する準備をしていく。

SMBを使用する準備

まずMac側から。

設定の共有設定項目から、ファイル共有を選択、これをオン。
ファイル共有のSS
続いて、右側、共有フォルダ(Shared Folders)に、必要であれば+ボタンを押してフォルダを追加。

右側、ユーザー(Users)の欄に使うユーザーが追加されているかを確認。
なければ+ボタンを押して追加。
ファイルにアクセスするだけならば読み取りのみ(Read Only)で構わないが、書き込みとかをするのなら読み取りと書き込み(Read & Write)に変えておく。

その後、設定(Options...)のボタンからWindows共有(Windows Sharing)の下の欄にあるユーザー一覧から使用するユーザーのチェックボックスをオンにしておく。

次にAndroid側。

ネットワークを確認して、MacのあるLAN上に接続しているかを確認しておく。

使ってみる

ファイルマネージャーからネットワーク、SMBを選択してアドレスを入力。
アドレスは上の画像(マスクしてあるが)File Sharing:Onの下の説明文のところに
smb://192.168.11.101
のような形で表記してある。

ユーザー名とパスワードも忘れずに匿名のチェックを外して入力し、接続。

うまく行けば、macで設定したフォルダが表示されるはずです。

がっ…ダメ…!

しかし、私の環境ではなぜか一部のフォルダにはアクセスできなくなってしまいました。

なぜ…?と思いましたが、調べても解決せず…

なので泣く泣く他の方法を模索することに

リモートログイン

気になったのは、File Sharingの時に数段下にあったリモートログイン(Remote Login)。

名前からして外部からファイルにアクセスできそう…!

ということで少し調べてみると、どうやらSSH暗号化を使ってアクセスするらしい…

と、ここでピンと!

最初の方に出てきたSFTPを調べていた時、説明の中にSSHという言葉が出てきたような気がしたのです。

物は試し、やってみることにしました。

SFTP-リモートログイン

まずはMacの準備。リモートログインの項目を開いて、使用するユーザーを追加しておく。

リモートログインのSS

次にAndroid側から、ファイルマネージャーのネットワークから同じように追加するのだが、この時、タイプをSFTPにする。

アドレスを入力(リモートログインの下、type "ssh ~~~~~@......"...部分)し、ユーザ名とパスワードを入力して接続。

うまく行けば、ユーザーのホームフォルダに移動するはずだ。ここから辿らなければならないのは面倒ではあるが、SMBを使うよりもSFTPを使ったほうが良いかもしれない。

SFTPの利点

SFTPは常にSSHという方法で暗号化されている。これはSecure SHellの略で、ファイルの閲覧等からパスワードの認証など、通信のすべてが暗号化される。

SSHは共有鍵と公開鍵を使用するハイブリッド暗号化方式で、安全性が高い(…らしい)

これは感覚だが、SMBなんかより断然接続が早かったように感じる。

まとめと補足

  1. FTPは普及率は高いが暗号化が一切されておらず、パスワードなども平文で送信するため盗聴される可能性もある。しっかり調べよう
  2. 今度ケーブル経由での同期方法も作ってみようと思った。
    • 詳細は今度書くかも
  3. MacOSの機能を使って今回は解決することができたが、ちょっと調べただけではダメだね。
    もっとしっかり調べないと。
  4. SMBは対応しているアプリ等が少なく、あまりおすすめできない上に、私の環境ではエラーが頻発。
    なんだコレ。
  5. SSHという文字列から今回の解決方法にたどり着けたのは僥倖。
    やっぱりよく調べておかないと。(何なら普通に調べたらこの方法出てきたけど。)
  6. SFTPはエラーもなく普通に快適に使えた。どうやら対応しているアプリも非常に多かった。
    • File Manager HDも対応していた…
      今更戻す気にもならないが。
  7. セキュリティは大事だね。しっかり調べないと(n回目)。
  8. ついでに速度大事。UX。
    • UXとUIについては論じ始めたら止まらないと思うんだけど僕だけかな
  9. IPは再接続しても変わらないのは初めて知りました
    • いちいち再編集しなくても簡単に再アクセスできますね

今回思ったこと以上9点。

特に深い技術的な内容ではないかもしれないが覚え書きと同じようなことで躓いた人に。
浅い調べ方だったり調べ方違ったりすると出てこないからね。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Mac】BOM付きファイルの変換

コマンド

Command
cat <(printf "\xEF\xBB\xBF") 変換後ファイル.txt > 変換前ファイル.txt
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Macの仮想環境上でaws-cliが実行できない時の解決方法(python3.8インストール後)

経緯

pythonの仮想環境上で、aws-cliを使用しようと公式のコマンドを実行しようとしても上手くできなかったので、その解決方法の備忘録。
設定を色々いじってもダメだったので全部消してから再インストールしてみました。(2020/03)

仕様

Macbook: MacOS Mojave
Python: Python 3.8.0

aws-cliをインストール

公式に従い、以下を実行

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

しかし、$ aws --version でバージョン確認したところエラー発生

cannot execute binary file

デバッグ

色々試したものの、どれもうまくいかなかったので一度仕様してないファイルはきっちり消すため
$ rm '/usr/local/bin/aws'
$ rm '/usr/local/bin/aws_completer'
で削除を実行。

そこから

$ pip install --user virtualenv
$ virtualenv ~/[仮想環境名]

で新たに仮想環境を作成して

#仮想環境を activate
$ source ~/[仮想環境名]/bin/activate

新しい仮想環境に awscli を pip install

([仮想環境名])~$ pip install --upgrade awscli

awscli が正しくインストールされたかを確認

$ aws --version

aws-cli/1.18.23 Python/3.8.0 Darwin/18.7.0 botocore/1.15.23

インストール成功しました!
この後awsコマンドも正常に利用できていることを確認できました!

まとめ

色々ググったけれど、公式サイトがなんやかんや最強でした。

参考・引用元
仮想環境に AWS CLI バージョン 1 をインストールする(公式サイト)

(ちなみに私はAWS CLI バージョン 2 をインストールしようとして失敗したので、バージョン 1 をインストールすることで解決しました。)
バージョン 2 インストール公式はこちら↓
Linux での AWS CLI バージョン 2 のインストール(公式サイト)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Macの仮想環境上でaws-cliが実行できない時の解決方法(Python3.8インストール後)

経緯

pythonの仮想環境上で、aws-cliを使用しようと公式のコマンドを実行しようとしても上手くできなかったので、その解決方法の備忘録。
設定を色々いじってもダメだったので全部消してから再インストールしてみました。(2020/03)

仕様

Macbook: MacOS Mojave
Python: Python 3.8.0

aws-cliをインストール

公式に従い、以下を実行

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

しかし、$ aws --version でバージョン確認したところエラー発生

cannot execute binary file

デバッグ

色々試したものの、どれもうまくいかなかったので一度仕様してないファイルはきっちり消すため
$ rm '/usr/local/bin/aws'
$ rm '/usr/local/bin/aws_completer'
で削除を実行。

そこから

$ pip install --user virtualenv
$ virtualenv ~/[仮想環境名]

で新たに仮想環境を作成して

#仮想環境を activate
$ source ~/[仮想環境名]/bin/activate

新しい仮想環境に awscli を pip install

([仮想環境名])~$ pip install --upgrade awscli

awscli が正しくインストールされたかを確認

$ aws --version

aws-cli/1.18.23 Python/3.8.0 Darwin/18.7.0 botocore/1.15.23

インストール成功しました!
この後awsコマンドも正常に利用できていることを確認できました!

まとめ

色々ググったけれど、公式サイトがなんやかんや最強でした。

参考・引用元
仮想環境に AWS CLI バージョン 1 をインストールする(公式サイト)

(ちなみに私はAWS CLI バージョン 2 をインストールしようとして失敗したので、バージョン 1 をインストールすることで解決しました。)
バージョン 2 インストール公式はこちら↓
Linux での AWS CLI バージョン 2 のインストール(公式サイト)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

お前らのGo環境は間違っている!GOPATHからの解放。

Welcome Gopher

Gopherの皆さんこんにちは。

Goの環境構築をより使いやすく、そしてシンプルにするためにこの記事を書きました。

Goの環境構築時に、GOPATHを設定した方が対象です。

GOPATHからの開放

Goの開発環境を構築する際に、GOPATHを設定する記事が散見されます。

しかし、時代は変わるもの、Goのエコシステムも大きく変わろうとしています。

長い間Goの環境を支えてきたGOPATHも、Go 1.13からは廃止されたようです(たぶん)

Goのブログにも記載されています

Our aim is for Go 1.13, scheduled for August 2019, to enable module mode by default (that is, to change the default from auto to on) and deprecate GOPATH mode. In order to do that, we’ve been working on better tooling support along with better support for the open-source module ecosystem.

GOPATHに変わり、GO 1.11から実装されたmoduleが今後のGoの開発には大きく貢献していくでしょう。

これから、Go開発に乗り出そうとする人は過去の栄光を捨て去り、これまでGoで開発してきた人は既存プロジェクトの様子を見ながら新しいGoのエコシステムに乗り換えましょう。

Goプロジェクトにmoduleを導入

と言っても、環境構築をさらに楽するために導入されたmoduleなので、導入も驚くほど簡単です。
より詳しい情報は、公式ページを確認してください

Goのインストール

On Mac

terminal
$ brew install go

プロジェクトのセットアップ

GOPATH以外のディレクトリで、プロジェクトを作成します。

と言うのも、GOPATH以下のディクトリでは、moduleは無効になっています。
GOPATHを指定していない場合、デフォルトでは,$HOME/goになっているので、それ以外のディレクトリでプロジェクトを作ります。

terminal
$ mkdir go-module-env

$ cd go-module-env

Go moduleの導入

モジュール名、もしくはプロジェクト名でmoduleを初期化します。

terminal
$ go mod init go-module-env
go: creating new go.mod: module go-module-env

ソースコードの作成

ソースコードを用意します。

以下のコードは、Goの軽量Webフレームワークで、サーバーに送られるリクエストをリッスンして、JSONを返すだけの簡単なwebアプリです。
main.goに、Ginを使用したコードおを書きましょう。
(ソースコードは、Ginのリポジトリからお拝借)

terminal
$ echo 'package main
import "github.com/gin-gonic/gin"
func main() {
        r := gin.Default()
        r.GET("/ping", func(c *gin.Context) {
                c.JSON(200, gin.H{
                        "message": "pong",
                })
        })
        r.Run() 
}' > main.go

or

terminal
$ touch main.go
main.go
package main
import "github.com/gin-gonic/gin"
func main() {
        r := gin.Default()
        r.GET("/ping", func(c *gin.Context) {
                c.JSON(200, gin.H{
                        "message": "pong",
                })
        })
        r.Run() 
}

Build!!!

ビルドしましょう!

terminal
$ go build
go: finding module for package github.com/gin-gonic/gin
go: found github.com/gin-gonic/gin in github.com/gin-gonic/gin v1.5.0

ちなみに、go.modを見ると、パッケージとその依存関係を確認できます。

terminal
$ cat go.mod
module go-module-env

go 1.14

require github.com/gin-gonic/gin v1.5.0

Goのバージョンがgo 1.14で、gin v1.5.0の依存関係を明示しています。

Run!!!

ビルドで作成された実行ファイルを使い、ソースコードを実行します。

terminal
$ ./go-module-env
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /ping                     --> main.main.func1 (3 handlers)
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080

実行時に、ネットワークへの接続の許可お画面が表示されます。
「許可」で許可しましょう。
スクリーンショット 2020-03-18 8.55.55.png

これで、全ての準備が整いました。
http://localhost:8080/ping にアクセスしてみましょう。

スクリーンショット 2020-03-18 9.13.24.png

JOSN形式で、レスポンスが返ってきてました。

では、ターミナルを見てみましょう。

terminal
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /ping                     --> main.main.func1 (3 handlers)
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080
[GIN] 2020/03/18 - 09:13:11 | 200 |     236.388µs |             ::1 | GET      /ping

先ほどのコマンドの一番下に、/pingへのGETリクエストを取得して、200ステータスを返していることが確認できました。

これで、Go moduleを使ったGoプロジェクトの作成が終わりました。

うむ、簡単である

Happy Hacking :sunglasses: !

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

お前らのGo開発環境は間違っている!GOPATHからの解放。

Welcome Gopher

Gopherの皆さんこんにちは。

Goの環境構築をより使いやすく、そしてシンプルにするためにこの記事を書きました。

Goの環境構築時に、GOPATHを設定した方が対象です。

GOPATHからの開放

Goの開発環境を構築する際に、GOPATHを設定する記事が散見されます。

しかし、時代は変わるもの、Goのエコシステムも大きく変わろうとしています。

長い間Goの環境を支えてきたGOPATHも、Go 1.13からは廃止されたようです(たぶん)

Goのブログにも記載されています

Our aim is for Go 1.13, scheduled for August 2019, to enable module mode by default (that is, to change the default from auto to on) and deprecate GOPATH mode. In order to do that, we’ve been working on better tooling support along with better support for the open-source module ecosystem.

GOPATHに変わり、GO 1.11から実装されたmoduleが今後のGoの開発には大きく貢献していくでしょう。

これから、Go開発に乗り出そうとする人は過去の栄光を捨て去り、これまでGoで開発してきた人は既存プロジェクトの様子を見ながら新しいGoのエコシステムに乗り換えましょう。

Goプロジェクトにmoduleを導入

と言っても、環境構築をさらに楽にするために導入されたmoduleなので、導入も驚くほど簡単です。
より詳しい情報は、公式ページを確認してください

Goのインストール

On Mac

terminal
$ brew install go

プロジェクトのセットアップ

GOPATH以外のディレクトリで、プロジェクトを作成します。

と言うのも、GOPATH以下のディクトリでは、moduleは無効になっています。
GOPATHを指定していない場合、デフォルトでは,$HOME/goになっているので、それ以外のディレクトリでプロジェクトを作ります。

terminal
$ mkdir go-module-env

$ cd go-module-env

Go moduleの導入

モジュール名、もしくはプロジェクト名でmoduleを初期化します。

terminal
$ go mod init go-module-env
go: creating new go.mod: module go-module-env

ソースコードの作成

ソースコードを用意します。

以下のコードは、Goの軽量WebフレームワークGinを用いた、サーバーに送られるリクエストをリッスンして、JSONを返すだけの簡単なwebアプリです。
main.goに、Ginを使用したコードを書きましょう。
(ソースコードは、Ginのリポジトリからお拝借)

terminal
$ echo 'package main
import "github.com/gin-gonic/gin"
func main() {
        r := gin.Default()
        r.GET("/ping", func(c *gin.Context) {
                c.JSON(200, gin.H{
                        "message": "pong",
                })
        })
        r.Run() 
}' > main.go

or

terminal
$ touch main.go
main.go
package main
import "github.com/gin-gonic/gin"
func main() {
        r := gin.Default()
        r.GET("/ping", func(c *gin.Context) {
                c.JSON(200, gin.H{
                        "message": "pong",
                })
        })
        r.Run() 
}

Build!!!

ビルドしましょう!

terminal
$ go build
go: finding module for package github.com/gin-gonic/gin
go: found github.com/gin-gonic/gin in github.com/gin-gonic/gin v1.5.0

ちなみに、go.modを見ると、パッケージとその依存関係を確認できます。

terminal
$ cat go.mod
module go-module-env

go 1.14

require github.com/gin-gonic/gin v1.5.0

Goのバージョンがgo 1.14で、gin v1.5.0の依存関係を明示しています。

Run!!!

ビルドで作成された実行ファイルを使い、ソースコードを実行します。

terminal
$ ./go-module-env
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /ping                     --> main.main.func1 (3 handlers)
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080

実行時に、ネットワークへの接続の許可の画面が表示されます。
「許可」で許可しましょう。
スクリーンショット 2020-03-18 8.55.55.png

これで、全ての準備が整いました。
http://localhost:8080/ping にアクセスしてみましょう。

スクリーンショット 2020-03-18 9.13.24.png

JOSN形式で、レスポンスが返ってきました。

では、ターミナルを見てみましょう。

terminal
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /ping                     --> main.main.func1 (3 handlers)
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080
[GIN] 2020/03/18 - 09:13:11 | 200 |     236.388µs |             ::1 | GET      /ping

先ほどのコマンドの一番下に、/pingへのGETリクエストを取得して、200ステータスを返していることが確認できました。

これで、Go moduleを使ったGoプロジェクトの作成が終わりました。

うむ、簡単である

Happy Hacking :sunglasses: !

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む