Technology Engineering

178inaba の技術ブログ

Raspberry Piでいろいろ。【その2 -> Swap領域設定、パスワード変更、パッケージ更新】

inabaです。
昨日に引き続き、Raspberry Piの設定をしていきます。

やること

  • SSH接続 OK
  • 起動ドライブをHDDにする OK
  • 無線でつなぐ OK
  • Swap領域設定 New
  • パスワード変更
  • パッケージ更新
  • GitLabインストール

Swap領域設定

GitLabのRaspberry Piへのインストールについてのページに

We recommend adding at least 1GB of swap

とあります。
「1GBはスワップ領域作ったほうがいいよ。」という感じでしょうか。

about.gitlab.com

また、Requirementsには

1GB RAM + 3GB of swap is the absolute minimum but we strongly advise against this amount of memory. See the unicorn worker section below for more advice.

とあります。
「メモリが1GBなら3GBはスワップ領域あったほうがいいよ。」という感じでしょうか。

docs.gitlab.com

昨日起動ディスクにしたHDDは1TBあるので容量の心配はありません。
なので、どーんと16GB割り当ててみることにします。

Swap領域の割り当てにはパーティションを割り当てる方法とファイルを割り当てる方法があるが、調べたところパフォーマンスに差はなく、ディスクフォーマットをしなくてよいのでファイルを使うことにする。
ちなみにRaspberry PiはもともとファイルのSwap領域がある。

$ swapon -s
Filename                Type        Size    Used    Priority
/var/swap                               file        102396  0   -1

単位はkBだそうなので、だいたい100MBくらいだろうか。

それでは実際に設定していく。

# Swap領域管理サービスを停止。
$ service dphys-swapfile stop

# Swap領域設定ファイルを編集。
$ sudo nano /etc/dphys-swapfile
$ cat /etc/dphys-swapfile
...
CONF_SWAPSIZE=16384
...
# ↑元々は「CONF_SWAPSIZE=1024」

# Swap領域管理サービスを開始。
# (ちょい時間かかる。)
$ sudo service dphys-swapfile start

# 確認
$ swapon -s
Filename                Type        Size    Used    Priority
/var/swap                               file        2097148 0   -1

あれ?
2097148kbという事だから2GBくらいにしかなってない。

調べた。

a244.hateblo.jp

CONF_MAXSWAP=2048という行のコメントアウト外して、倍の4096にすると良いらしい。

上の行のコメントは

restrict size (computed and absolute!) to maximally this limit
can be set to empty for no limit, but beware of filled partitions!
this is/was a (outdated?) 32bit kernel limit (in MBytes), do not overrun it
but is also sensible on 64bit to prevent filling /var or even / partition

Google翻訳にかけると

最大限にこの制限にサイズ(計算されたと絶対!)を制限する
   制限なしで空にすることができますが、塗りつぶされたパーティションには注意してください!
   これは(古い?)32ビットカーネルの制限(MBytes)であり、それをオーバーランさせない
   しかし、/varやeven / partitionの埋め込みを防ぐために64ビットでも有効です

重要そうなのは

制限なしで空にすることができますが(can be set to empty for no limit)

ということはCONF_MAXSWAP=というように空を設定すれば制限無しにできるのかな?

再度設定

# Swap領域管理サービスを停止。
$ service dphys-swapfile stop

# Swap領域設定ファイルを編集。
$ cat /etc/dphys-swapfile
...
#CONF_MAXSWAP=2048
...
$ sudo nano /etc/dphys-swapfile
$ cat /etc/dphys-swapfile
...
CONF_MAXSWAP=
...

# Swap領域管理サービスを開始。
# (まぁまぁ時間かかる。)
$ sudo service dphys-swapfile start
Job for dphys-swapfile.service failed. See 'systemctl status dphys-swapfile.service' and 'journalctl -xn' for details.
# 失敗したようだ。

$ systemctl status dphys-swapfile.service
● dphys-swapfile.service - LSB: Autogenerate and use a swap file
   Loaded: loaded (/etc/init.d/dphys-swapfile)
   Active: failed (Result: timeout) since Mon 2016-12-12 16:49:03 UTC; 1min 20s ago # timeoutと出ている。
  Process: 15078 ExecStop=/etc/init.d/dphys-swapfile stop (code=exited, status=0/SUCCESS)
  Process: 15135 ExecStart=/etc/init.d/dphys-swapfile start (code=killed, signal=TERM)

試しにCONF_SWAPSIZEを1024に戻して開始してみる。

# 念のため停止コマンドを実行
$ sudo service dphys-swapfile stop
$ cat /etc/dphys-swapfile 
...
CONF_SWAPSIZE=16384
...
$ sudo nano /etc/dphys-swapfile
$ cat /etc/dphys-swapfile
...
CONF_SWAPSIZE=1024
...
$ sudo service dphys-swapfile start
$

成功した。

今度はCONF_SWAPSIZEとCONF_MAXSWAP両方に16384を設定してみる。

$ sudo service dphys-swapfile stop
$ cat /etc/dphys-swapfile 
...
CONF_SWAPSIZE=1024
...
CONF_MAXSWAP=
...
$ sudo nano /etc/dphys-swapfile
$ cat /etc/dphys-swapfile
...
CONF_SWAPSIZE=16384
...
CONF_MAXSWAP=16384
...
$ sudo service dphys-swapfile start
Job for dphys-swapfile.service failed. See 'systemctl status dphys-swapfile.service' and 'journalctl -xn' for details.
# 失敗した。

$ systemctl status dphys-swapfile.service
● dphys-swapfile.service - LSB: Autogenerate and use a swap file
   Loaded: loaded (/etc/init.d/dphys-swapfile)
   Active: failed (Result: timeout) since Mon 2016-12-12 17:07:04 UTC; 36s ago # 同じくtimeout
  Process: 15307 ExecStop=/etc/init.d/dphys-swapfile stop (code=exited, status=0/SUCCESS)
  Process: 15403 ExecStart=/etc/init.d/dphys-swapfile start (code=killed, signal=TERM)

では、8GBにする。

$ sudo service dphys-swapfile stop
$ cat /etc/dphys-swapfile 
...
CONF_SWAPSIZE=16384
...
CONF_MAXSWAP=16384
...
$ sudo nano /etc/dphys-swapfile 
$ cat /etc/dphys-swapfile 
...
CONF_SWAPSIZE=8192
...
CONF_MAXSWAP=
...
$ sudo service dphys-swapfile start
$

成功した。

結局スワップ領域は8GBに。

パスワード変更

デフォルトユーザpiでログインすると下記のメッセージが表示される。

SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.

ようは「パスワードがデフォルトだとセキュリティリスクがありますよ。」という話らしい。
なので変更する。

$ passwd
Changing password for pi.
(current) UNIX password:  # 現在のパスワード
Enter new UNIX password:  # 新しいパスワード
Retype new UNIX password: # 新しいパスワード確認
passwd: password updated successfully

念のため別コンソールでログインして反映されたか確認するとよい。

パッケージ更新

全てのパッケージを最新にする。

$ sudo apt-get clean && sudo apt-get update && sudo apt-get -y upgrade && sudo apt-get clean
Get:1 http://archive.raspberrypi.org jessie InRelease [13.2 kB]                     
Get:2 http://mirrordirector.raspbian.org jessie InRelease [14.9 kB]                 
Get:3 http://archive.raspberrypi.org jessie/main armhf Packages [128 kB]
Get:4 http://mirrordirector.raspbian.org jessie/main armhf Packages [8,981 kB]
Get:5 http://archive.raspberrypi.org jessie/ui armhf Packages [53.6 kB]        
Ign http://archive.raspberrypi.org jessie/main Translation-en_GB                                                                                                                 
Ign http://archive.raspberrypi.org jessie/main Translation-en                                                                                                                    
Ign http://archive.raspberrypi.org jessie/ui Translation-en_GB                                                                                                                   
Ign http://archive.raspberrypi.org jessie/ui Translation-en                                                                                                                      
Get:6 http://mirrordirector.raspbian.org jessie/contrib armhf Packages [37.5 kB]                                                                                                 
Get:7 http://mirrordirector.raspbian.org jessie/non-free armhf Packages [70.3 kB]                                                                                                
Get:8 http://mirrordirector.raspbian.org jessie/rpi armhf Packages [1,356 B]                                                                                                     
Ign http://mirrordirector.raspbian.org jessie/contrib Translation-en_GB                                                                                                          
Ign http://mirrordirector.raspbian.org jessie/contrib Translation-en
Ign http://mirrordirector.raspbian.org jessie/main Translation-en_GB
Ign http://mirrordirector.raspbian.org jessie/main Translation-en
Ign http://mirrordirector.raspbian.org jessie/non-free Translation-en_GB
Ign http://mirrordirector.raspbian.org jessie/non-free Translation-en
Ign http://mirrordirector.raspbian.org jessie/rpi Translation-en_GB
Ign http://mirrordirector.raspbian.org jessie/rpi Translation-en
Fetched 9,300 kB in 3min 18s (46.8 kB/s)
Reading package lists... Done
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
  libdrm2 libicu52 raspberrypi-sys-mods raspi-config
4 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 6,615 kB of archives.
After this operation, 60.4 kB of additional disk space will be used.
Get:1 http://archive.raspberrypi.org/debian/ jessie/main libdrm2 armhf 2.4.71-1+rpi1 [32.4 kB]
Get:2 http://mirrordirector.raspbian.org/raspbian/ jessie/main libicu52 armhf 52.1-8+deb8u4 [6,556 kB]
Get:3 http://archive.raspberrypi.org/debian/ jessie/main raspberrypi-sys-mods all 20161208+1 [8,412 B]
Get:4 http://archive.raspberrypi.org/debian/ jessie/main raspi-config all 20161207 [17.7 kB]
Fetched 6,615 kB in 5s (1,267 kB/s)                                   
Reading changelogs... Done
(Reading database ... 31272 files and directories currently installed.)
Preparing to unpack .../libdrm2_2.4.71-1+rpi1_armhf.deb ...
Unpacking libdrm2:armhf (2.4.71-1+rpi1) over (2.4.65-3~bpo8+1) ...
Preparing to unpack .../libicu52_52.1-8+deb8u4_armhf.deb ...
Unpacking libicu52:armhf (52.1-8+deb8u4) over (52.1-8+deb8u3) ...
Preparing to unpack .../raspberrypi-sys-mods_20161208+1_all.deb ...
Unpacking raspberrypi-sys-mods (20161208+1) over (20161124) ...
Preparing to unpack .../raspi-config_20161207_all.deb ...
Unpacking raspi-config (20161207) over (20161114) ...
Processing triggers for systemd (215-17+deb8u5) ...
Setting up libdrm2:armhf (2.4.71-1+rpi1) ...
Setting up libicu52:armhf (52.1-8+deb8u4) ...
Setting up raspberrypi-sys-mods (20161208+1) ...
Installing new version of config file /etc/profile.d/sshpasswd.sh ...
Setting up raspi-config (20161207) ...
Processing triggers for libc-bin (2.19-18+deb8u6) ...

こんな感じかな。

今日はここまで。

Raspberry Piでいろいろ。【その1 -> SSH接続、起動ドライブHDD化、無線LAN設定】

ご無沙汰しております。
inabaです。

Raspberry Pi 3を夏頃に入手してLチカさせてほったらかしにしていました。
もったいないのでRaspberry PiでGitLabサーバでも作りたいと思います。

備忘録としてブログにも記しておこうとおもいます。

やること

  • SSH接続
  • 起動ドライブをHDDにする
  • パスワード変える
  • 無線でつなぐ
  • パッケージ更新
  • GitLabインストール

ssh接続

推奨OSのraspbianは最初からsshdが立ち上がっているという話だったが、自分がインストールしたRASPBIAN JESSIE LITEでは立ち上がっていなかったのでsshdを立ち上げ。
これができないとRaspberry Piにキーボードを繋いで操作しなければならないので一番最初にやる。

  1. sudo raspi-configを実行。
  2. 5 Interfacing Optionsを選択。
  3. P2 SSHを選択。
  4. Yesを選択。
  5. Okを選択。
  6. Finishを選択。

追記(2017/04/03)
raspi-configが更新され、SSHの設定が7 Advanced Optionsから5 Interfacing Optionsに変更されました。

この後、同じネットワークにあるPCからssh pi@raspberrypi.localと打てば入れる。
再起動しても設定は生きているので大丈夫。
自分は面倒なのでsshの設定だけしたら、Raspberry Piのキーボードは外してmacから全部操作することにした。

起動ドライブをHDDに変更

初期状態から変更が少ない状態のままHDDに移行するほうが良いと思うので早めにやる。

理由としては、標準ではSDカードが起動ドライブになるのだが、SDカードは書き換えに弱く、壊れやすいと聞いたため。
ブートローダーはSDカードから変えられないそうなので、SD自体は必須となるのだが、書き込み回数自体は減るだろうと思う。

# ディスク名確認。
$ sudo fdisk -l
Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors

# 買ったばかりでパーティションが無いので作る。
$ sudo fdisk /dev/sda # 対話式コマンド。
Command (m for help): m # コマンド一覧を見る。

Help:

  DOS (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag

  Generic
   d   delete a partition
   l   list known partition types
   n   add a new partition
   p   print the partition table
   t   change a partition type
   v   verify the partition table

  Misc
   m   print this menu
   u   change display/entry units
   x   extra functionality (experts only)

  Save & Exit
   w   write table to disk and exit
   q   quit without saving changes

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table

Command (m for help): n # 新しくパーティションを作る。
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): # プライマリパーティションなのでデフォルトのままエンター。
Partition number (1-4, default 1): # パーティションは1つだけ作るのでデフォルトのままエンター。
First sector (2048-1953525167, default 2048): # 最大サイズで作るのでデフォルトのままエンター。
Last sector, +sectors or +size{K,M,G,T,P} (2048-1953525167, default 1953525167): # 同じくデフォルトのままエンター。

Created a new partition 1 of type 'Linux' and of size 931.5 GiB. # パーティションが作られた。

Command (m for help): p # パーティションができたことを確認。

Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
# ...

Device     Boot Start        End    Sectors   Size Id Type
/dev/sda1        2048 1953525167 1953523120 931.5G 83 Linux # パーティション。

Command (m for help): w # ディスクに書き込み。
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

# OSの非同期書き込みを考慮してSync
$ sync

# パーティションのファイルシステムをext4にする。
$ sudo mkfs.ext4 /dev/sda1
mke2fs 1.42.12 (29-Aug-2014)
/dev/sda1 contains a ext4 file system
    last mounted on Sun Dec 11 11:49:33 2016
Proceed anyway? (y,n) y # すでに作成されていると、実行するか確認されるのでy。
Creating filesystem with 244190390 4k blocks and 61054976 inodes
Filesystem UUID: 50945b0a-3c30-4de5-a95d-223bb0f6415a
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
    102400000, 214990848

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done     

# SDカードの起動ドライブのデータをHDDにコピー。
$ sudo dd if=/dev/mmcblk0p2 of=/dev/sda1 bs=32M conv=noerror,sync
939+1 records in
940+0 records out
31541166080 bytes (32 GB) copied, 1740.37 s, 18.1 MB/s

# ディスクをチェック。
$ sudo e2fsck -f /dev/sda1
e2fsck 1.42.12 (29-Aug-2014)
/dev/sda1: recovering journal
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong (7376566, counted=7351276). # ブロック数に差異が出ている。
Fix<y>? yes 修正するかと聞かれたのでy。
Free inodes count wrong (1859519, counted=1859633).
Fix<y>? yes # 同じくy。

/dev/sda1: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sda1: 35407/1895040 files (0.2% non-contiguous), 342292/7693568 blocks

# SDをコピーしたためSDのサイズになっているらしい。パーティションを最大化するためリサイズ。
$ sudo resize2fs /dev/sda1
resize2fs 1.42.12 (29-Aug-2014)
Resizing the filesystem on /dev/sda1 to 244190390 (4k) blocks.
The filesystem on /dev/sda1 is now 244190390 (4k) blocks long.

# fstabを書き換えるためマウント。
$ sudo mount -t ext4 -o defaults /dev/sda1 /mnt

# fstabの/dev/mmcblk0p2を/dev/sda1へ書き換え。
$ cat fstab 
proc            /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1 # 変更前。
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
$ sudo nano /mnt/etc/fstab # nanoで書き換え。
$ cat fstab 
proc            /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/sda1       /               ext4    defaults,noatime  0       1 # 変更後。
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

# ブートローダーの起動ドライブの設定を書き換え
# root=/dev/mmcblk0p2 -> root=/dev/sda1
$ cat /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
$ sudo nano /boot/cmdline.txt
$ cat /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

# 再起動
$ sudo reboot

# 再起動後
$ df -kh
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       918G  839M  879G   1% /

これでHDDを使うようになった。
ファイルシステムをCentOS7で使われているxfsにしようかとも思ったが、説明を読むと、メモリを大量に使うような仕様になっているようだったのでいつものext4にした。

Linux HDDフォーマット 参考サイト
Linux CentOS 外付けHDDのフォーマットとマウント

ファイルシステム 参考サイト
qiita.com

Raspberry Pi HDD起動 参考サイト
jyn.jp

無線で繋ぐ

$ sudo sh -c 'wpa_passphrase (SSID) (PASSPHRASE) >> /etc/wpa_supplicant/wpa_supplicant.conf'

上記を実行。
(SSID) (PASSPHRASE)は自分のSSIDとパスに変更して実行してください。

仮に

$ sudo sh -c 'wpa_passphrase foo bar >> /etc/wpa_supplicant/wpa_supplicant.conf'

を実行した場合の/etc/wpa_supplicant/wpa_supplicant.confが下記。

country=GB
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="foo"
    #psk="bar"
    psk=baz
}

パスフレーズが平文でコメントアウトされているので、セキュリティ的に気になるのであれば削除しておいたほうがいい。
自分はテキストエディタnanoで削除した。

$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

無線接続が遅いと感じたときの対処方法もあるようだったが、現状不満が無いので設定しなかった。
今後、不満があれば設定する。
Raspberry Piで無線LANの反応が悪い時の対処法 | ものづくりエクスペリメント

今日はここまで〜。

【Go】kingpinをinit()でパースしていたらテストでエラーが出た話 #golang

kingpin

標準のflagパッケージでは、同時に長いオプションと短いオプション(shortオプション)を定義するのが面倒。

package main

import (
    "flag"
    "fmt"
)

var (
    dryRun = flag.Bool("dry-run", false, "dry run mode.")
)

func init() {
    flag.BoolVar(dryRun, "n", false, "dry run mode.")
    flag.Parse()
}

func main() {
    fmt.Printf("dry run mode: %v\n", *dryRun)
}

説明も二重に出てる。

$ go build -o flag
$ ./flag --help
Usage of ./flag:
  -dry-run
        dry run mode.
  -n    dry run mode.

※説明に関してはパッケージ変数Usageを上書きすることで変えられる。

上記のような理由でshortオプションの定義がいい感じのパッケージ無いかな〜と探してたらkingpinを見つけた!
kingpinだといい感じにshortオプションを宣言できる!!

package main

import (
    "fmt"

    "gopkg.in/alecthomas/kingpin.v2"
)

var (
    dryRun = kingpin.Flag("dry-run", "dry run mode.").Short('n').Bool()
)

func init() {
    kingpin.Parse()
}

func main() {
    fmt.Printf("dry run mode: %v\n", *dryRun)
}

Short('n')だけでshortオプションを定義できる。

説明もデフォルトでいい感じ。

$ go run main.go --help
usage: main [<flags>]

Flags:
      --help     Show context-sensitive help (also try --help-long and --help-man).
  -n, --dry-run  dry run mode.

exit status 1

error in test

便利に使っていたkingpinだけど、テスト時に問題が。。。
フラグを指定していなければ何も問題ない。

$ go test
PASS
ok      gist/kingpin    0.008s

が、フラグを指定するとエラーが。。。

$ go test -v
kingpin.test: error: unknown short flag '-t', try --help
exit status 1
FAIL    gist/kingpin    0.008s

何が起きているのだろうか

-tの正体を突き止めるために引数を表示するログを入れてみた。

func init() {
    fmt.Println(os.Args)
    kingpin.Parse()
}

結果

$ go test -v
[/tmp/kingpin.test -test.v=true]
kingpin.test: error: unknown short flag '-t', try --help
exit status 1
FAIL    gist/kingpin    0.008s

-test.v=true←これが原因らしい。

標準のflagパッケージではどうか?

func init() {
    flag.BoolVar(dryRun, "n", false, "dry run mode.")

    fmt.Println(os.Args)

    flag.Parse()
}

結果

$ go test -v
[/tmp/flag.test -test.v=true]
=== RUN   TestRun
--- PASS: TestRun (0.00s)
PASS
ok      gist/flag   0.006s

大丈夫っぽい。
ソースを追ったら、flagパッケージのパッケージ変数CommandLinego testコマンドとテストバイナリで共有しているから大丈夫だったみたい。
(go testでテストバイナリ作る時に、go test用のオプションも含めてバイナリを作っているっぽい。)
確認のため、別なFlagSetを定義してそちらを使ってみる。

package main

import (
    "flag"
    "fmt"
    "os"
)

var (
    tflg   = flag.NewFlagSet("test_flag", flag.ExitOnError)
    dryRun = tflg.Bool("dry-run", false, "dry run mode.")
)

func init() {
    tflg.BoolVar(dryRun, "n", false, "dry run mode.")

    fmt.Println(os.Args)

    tflg.Parse(os.Args[1:])
}

func main() {
    fmt.Printf("dry run mode: %v\n", *dryRun)

    result := run(*dryRun)
    fmt.Printf("result: %v\n", result)
}

func run(dryRun bool) bool {
    if dryRun {
        return false
    }

    return true
}

FlagSetNewFlagSet()で定義できる。
Parse()だけ通常と違い、引数を渡してやる必要がある。

結果

$ go test -v
[/tmp/flag.test -test.v=true]
flag provided but not defined: -test.v
Usage of test_flag:
  -dry-run
        dry run mode.
  -n    dry run mode.
exit status 2
FAIL    gist/flag   0.006s

やはり失敗した。

まとめ

  • kingpin特有のエラーではなく、flagパッケージでも出る。
  • エラーを出さないためにはmain()でパースする必要がある。

基本的な事だけど、init()はテスト時に呼ばれて、main()はテスト時に呼ばれないって事だよね。

laravelのチュートリアルをやった。

どうも。
178inabaです。

はてなブログを開設してみたはいいものの、何を書こうかと考えているうちに数日が過ぎ、

ついさっき、思い出したように

ブログなんだから日記を書こう!

と思い、今日やったことでもつらつらと書こうかなと。。。

今日やったこと

laravelチュートリアル

タイトルの通りなんですが、
laravel製の軽量フレームワークlumenを触っていて、セッションの機能が無さそうだったのでlaravelを触り出しました。
なんで先にlumen触ってたかと言うと、ざっくり言ってしまえばフルスタックは学習コストが高くてサクッと遊べないという感じがあったからですかね。

やったチュートリアルは2つ

実際多機能でチュートリアルやっただけでは全部把握しきれないですねw
laravelはもうちょっと触ってみる予定です。

mailgunに登録して使ってみた

上のチュートリアルに関連して、laravelのauthに「パスワードを忘れたらメールでURL送ってくれて、新しいパスワードを設定できる機能」があって
それを試そうと思って登録
gmailでも試したのですがパスワードを設定に書くのがなんか嫌で。。。

mailgunだとパスワードじゃなくAPIKeyを設定すればよいみたいなのでよさ気。
あと「mailgun」って名前自体がかっこよくないですか?w

ドメインも勉強のために持っていたので、それ使って独自ドメインでメール送れるように設定。
設定はmailgunでDNSレコードの設定値を表示してくれたので楽でした。
多少設定の意味とか調べながら設定して送信。

メールキタ━━━━(゚∀゚)━━━━!!

こういうのは成功した瞬間が楽しいですね。

Mailtrapを使ってみたい

laravelのドキュメントのmailの項で紹介されていたサービス。 送ったメールを実際には送信せず、web画面上から確認できるサービスみたい。

試してみたいです。

その他最近の出来事

  • apple musicに入ってみました。
    • 神聖かまってちゃんいいですね。 -あるてぃめっとレイザーとロックンロールは鳴り止まないが好きです。
  • 好きだったバラエティ番組「ざっくりハイタッチ」が終わってしまいました。
    • 終了じゃなくてリニューアルだと思いたいです。。。
  • 先週今週は「さんまのお笑い向上委員会」も無いし。。。

今日やったこと以外にも書いちゃった。
書いてみた感じ、「週1くらいなら楽しく更新できるかな」って感じかなー
ではまたー

このブログはmarkdownで書きました.md