VSCodeのターミナルで使うシェルを変更する方法(2021)

2021年4月のアップデートで、VSCodeのversion 1.56にてターミナルに使用するシェルの設定方法が変更されています。 私用PCの方の設定をzshに変更しようとしてちょっと調べたので備忘録です。

code.visualstudio.com

今までだと以下のように記述していたものがdeprecatedと表示されるようになりました。

"terminal.integrated.shell.osx": "/bin/zsh"


f:id:ryu022304:20210516235547p:plain

新しい設定の方法だと以下のように記述すれば同じ設定が可能です。私はmacを使用しているので osx を指定しています。Windowsを使われている方はこれを windows にすれば問題ないです。

"terminal.integrated.profiles.osx": {
    "zsh": {
        "path": "/bin/zsh",
    },
},
"terminal.integrated.defaultProfile.osx": "zsh",

defaultProfile.<platform> では profiles.<platform> に記述しているキーを指定します。

上記設定を追記したのにシェルに変化がない場合はどこかでbashをデフォルトにする設定を行っていないか確認しましょう。

Docker上でGolang(Echo)+realizeの起動まで

概要

Goでの開発用環境構築をやっていました。Echoの起動とrealizeによるホットリロードの確認まで行っています。
結構苦労したので書き残しておきます。

github.com

github.com

内容

ディレクトリ構成

動作確認しか行っていないので、必要最低限のもののみ入っています。

.
├── Dockerfile
├── docker-compose.yml
├── go.mod
├── go.sum
├── main
└── main.go

Docker

Dockerfile及びdocker-compose.ymlを以下のように設定します。

FROM golang:alpine

ENV SRC_DIR=/go/src/github.com/ryu022304/test-echo
ENV  GO111MODULE=on

WORKDIR $SRC_DIR

RUN apk update && apk add git

RUN go mod init test-echo
RUN go get github.com/labstack/echo/v4
RUN GO111MODULE=off go get github.com/oxequa/realize
version: '3'
services:
  app:
    build: .
    ports:
      - 1323:1323
    volumes:
      - .:/go/src/github.com/ryu022304/test-echo
    tty: true
    command: realize start

Dockerfile内の RUN GO111MODULE=off go get github.com/oxequa/realize については、先頭の RUN GO111MODULE=off をつけないと下記のようなエラーが出てしまうので追加しています。docker-compose.yml内の realize start に関しましては、後述するrealizeの実行を行っています。

go: github.com/oxequa/realize imports
    gopkg.in/urfave/cli.v2: gopkg.in/urfave/cli.v2@v2.3.0: parsing go.mod:
    module declares its path as: github.com/urfave/cli/v2
            but was required as: gopkg.in/urfave/cli.v2

github.com

realize

.realize.yamlを以下のように設定します。.realize.ymlだとだめなようなので注意が必要です。
この設定とdocker-compose.ymlに記述した内容により、 docker-compose up しただけで.goのソースを更新するたびにbuildと実行を自動で行ってくれるようにします。

settings:
  legacy:
    force: false
    interval: 0s
schema:
- name: realize
  path: .
  commands:
    install:
      status: true
      method: go build -o ./main ./
    run:
      status: true
      method: ./main
  watcher:
    extensions:
    - go
    paths:
    - /
    ignored_paths:
    - .git
    - .realize
    - vendor

main.go

基本的にechoのgithub上にあるサンプルをそのまま使っています。

package main

import (
  "net/http"
  "github.com/labstack/echo/v4"
  "github.com/labstack/echo/v4/middleware"
)

func main() {
  // Echo instance
  e := echo.New()

  // Middleware
  e.Use(middleware.Logger())
  e.Use(middleware.Recover())

  // Routes
  e.GET("/", hello)

  // Start server
  e.Logger.Fatal(e.Start(":1323"))
}

// Handler
func hello(c echo.Context) error {
  return c.String(http.StatusOK, "Hello, World!\n")
}

確認

docker-composeでコンテナを立ち上げます。

$ docker-compose up
Creating network "test-echo_default" with the default driver
Creating test-echo_app_1 ... done
Attaching to test-echo_app_1
app_1  | [08:43:33][REALIZE] : Watching 1 file/s 1 folder/s
app_1  | [08:43:33][REALIZE] : Install started
app_1  | [08:43:34][REALIZE] : Install completed in 1.209 s
app_1  | [08:43:34][REALIZE] : Running..
app_1  | [08:43:34][REALIZE] :    ____    __
app_1  | [08:43:34][REALIZE] :   / __/___/ /  ___
app_1  | [08:43:34][REALIZE] :  / _// __/ _ \/ _ \
app_1  | [08:43:34][REALIZE] : /___/\__/_//_/\___/ v4.1.17
app_1  | [08:43:34][REALIZE] : High performance, minimalist Go web framework
app_1  | [08:43:34][REALIZE] : https://echo.labstack.com
app_1  | [08:43:34][REALIZE] : ____________________________________O/_______
app_1  | [08:43:34][REALIZE] :                                     O\
app_1  | [08:43:34][REALIZE] : ⇨ http server started on [::]:1323

リクエストを送ってみるとレスポンスが返ってくることが確認できます。

$ curl localhost:1323
Hello, World!

ソースを更新するとホットリロードされています。

app_1  | [08:48:05][REALIZE] : GO changed /go/src/github.com/ryu022304/test-echo/main.go
app_1  | [08:48:05][REALIZE] : Install started
app_1  | [08:48:07][REALIZE] : Install completed in 2.489 s
app_1  | [08:48:07][REALIZE] : Running..
app_1  | [08:48:07][REALIZE] :    ____    __
app_1  | [08:48:07][REALIZE] :   / __/___/ /  ___
app_1  | [08:48:07][REALIZE] :  / _// __/ _ \/ _ \
app_1  | [08:48:07][REALIZE] : /___/\__/_//_/\___/ v4.1.17
app_1  | [08:48:07][REALIZE] : High performance, minimalist Go web framework
app_1  | [08:48:07][REALIZE] : https://echo.labstack.com
app_1  | [08:48:07][REALIZE] : ____________________________________O/_______
app_1  | [08:48:07][REALIZE] :                                     O\
app_1  | [08:48:07][REALIZE] : ⇨ http server started on [::]:1323

雑感

Go Modulesをちゃんと理解出来ていないので時間がかかってしまいました。精進しようと思います。

phpbrewで`phpbrew known --update`出来なかったときの対応

TL;DR

下記コマンドを実行。

$ phpbrew self-update

概要

MacPHPのバージョン管理をphpbrewでやっていて、PHP7.4を入れようとしたがphpbrew knownで確認した所リストに7.4系がなかった。

$ phpbrew known
Read local release list (last update: 2019-09-29 14:33:51 UTC).
You can run `phpbrew update` or `phpbrew known --update` to get a newer release list.
7.3: 7.3.10, 7.3.9, 7.3.8, 7.3.7, 7.3.6, 7.3.5, 7.3.4, 7.3.3 ...
7.2: 7.2.23, 7.2.22, 7.2.21, 7.2.20, 7.2.19, 7.2.18, 7.2.17, 7.2.16 ...
7.1: 7.1.32, 7.1.31, 7.1.30, 7.1.29, 7.1.28, 7.1.27, 7.1.26, 7.1.25 ...
7.0: 7.0.33, 7.0.32, 7.0.31, 7.0.30, 7.0.29, 7.0.28, 7.0.27, 7.0.26 ...
5.6: 5.6.40, 5.6.39, 5.6.38, 5.6.37, 5.6.36, 5.6.35, 5.6.34, 5.6.33 ...
5.5: 5.5.38, 5.5.37, 5.5.36, 5.5.35, 5.5.34, 5.5.33, 5.5.32, 5.5.31 ...
5.4: 5.4.45, 5.4.44, 5.4.43, 5.4.42, 5.4.41, 5.4.40, 5.4.39, 5.4.38 ...

last updateが明らかに古いので指示通りphpbrew known --updateしたが駄目だった。

$ phpbrew known --update
===> Fetching release list...
Downloading https://secure.php.net/releases/index.php?json&version=7&max=100 via curl extension
[==================================================================] 178.00/178.00B 100%
CurlKit\CurlException:  at [The Location header can not be found: HTTP/2 301
server: myracloud
date: Sat, 12 Sep 2020 22:15:14 GMT
content-type: text/html
content-length: 178
location: https://www.php.net/releases/index.php?json&version=7&max=100
expires: Sat, 12 Sep 2020 22:15:14 GMT
cache-control: max-age=0
etag: "myra-815d4080"]
Trace:

    0) CurlKit\CurlDownloader->request('https://secure.php.net/releases/index.php?json&version=7&max=100')
    1) PhpBrew\Downloader\PhpCurlDownloader->process('https://secure.php.net/releases/index.php?json&version=7&max=100', '/private/var/folders/_r/lc2rsbms73zg4kh8ypstg2l80000gn/T/phpbrew_ZFQfIW')
    2) PhpBrew\Downloader\BaseDownloader->download('https://secure.php.net/releases/index.php?json&version=7&max=100')
    3) PhpBrew\ReleaseList::downloadReleaseListFromOfficialSite(7, GetOptionKit\OptionResult)
    4) PhpBrew\ReleaseList::buildReleaseListFromOfficialSite(GetOptionKit\OptionResult)
    5) PhpBrew\ReleaseList->fetchRemoteReleaseList(GetOptionKit\OptionResult)
    6) PhpBrew\Tasks\FetchReleaseListTask->fetch()
    7) PhpBrew\Command\KnownCommand->execute()
    8) call_user_func_array([PhpBrew\Command\KnownCommand, 'execute'], [])
    9) CLIFramework\CommandBase->executeWrapper([])
    10) CLIFramework\Application->run(['/usr/local/bin/phpbrew', 'known', '--update'])
    11) PhpBrew\Console->runWithTry(['/usr/local/bin/phpbrew', 'known', '--update'])
    12) require('phar:///usr/local/bin/phpbrew/scripts/phpbrew-emb.php')

色々探したが、公式のissueにあったコメントでphpbrew self-updateとあり、解決した。

github.com

$ phpbrew known
Read local release list (last update: 2020-09-12 22:21:19 UTC).
You can run `phpbrew update` or `phpbrew known --update` to get a newer release list.
7.4: 7.4.10, 7.4.9, 7.4.8, 7.4.7, 7.4.6, 7.4.5, 7.4.4, 7.4.3 ...
7.3: 7.3.22, 7.3.21, 7.3.20, 7.3.19, 7.3.18, 7.3.17, 7.3.16, 7.3.15 ...
7.2: 7.2.33, 7.2.32, 7.2.31, 7.2.30, 7.2.29, 7.2.28, 7.2.27, 7.2.26 ...
7.1: 7.1.33, 7.1.32, 7.1.31, 7.1.30, 7.1.29, 7.1.28, 7.1.27, 7.1.26 ...
7.0: 7.0.33, 7.0.32, 7.0.31, 7.0.30, 7.0.29, 7.0.28, 7.0.27, 7.0.26 ...
5.6: 5.6.40, 5.6.39, 5.6.38, 5.6.37, 5.6.36, 5.6.35, 5.6.34, 5.6.33 ...
5.5: 5.5.38, 5.5.37, 5.5.36, 5.5.35, 5.5.34, 5.5.33, 5.5.32, 5.5.31 ...
5.4: 5.4.45, 5.4.44, 5.4.43, 5.4.42, 5.4.41, 5.4.40, 5.4.39, 5.4.38 ...

上記のコメントにある通り、最新バージョンなら発生しないエラーのようなので、エラーになったらとりあえずバージョンアップしよう。

Laravelでファイルのアップロード・ダウンロードのテスト

Laravelでファイルのアップロード・ダウンロードのテストを試していたら躓いたことが多かったので備忘録です。

環境

  • PHP: 7.4.7
  • Laravel: 7.15.0

事前準備

ControllerやModel、ルーティングは以下のとおりです。
また、ファイル保存先の設定としてはconfig/filesystems.phpで使用するdiskをpublicに設定しているので、 ファイルがアップロードされた時に、storage/app/public以下にあるtest ディレクトリ以下にファイルを保存します。

ルーティング

<?php

use Illuminate\Support\Facades\Route;

Route::get('/file', 'FileController@index')->name('file.index');
Route::post('/file', 'FileController@upload')->name('file.upload');
Route::get('/file/{fileId}', 'FileController@download')->name('file.download');

一つのページでアップロードとダウンロードが出来る機能を有しているものを想定しています。

Model

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\UploadedFile;

class File extends Model
{
    protected $fillable = [
        'name',
        'path'
    ];

    public function saveFile(UploadedFile $file)
    {
        $name = $file->getClientOriginalName();
        $path = $file->store('test');

        return $this->fill(compact('name', 'path'))->save();
    }
}

Filesテーブルにファイル名とパスを保存します。

File Storage - Laravel - The PHP Framework For Web Artisans

Controller

<?php

namespace App\Http\Controllers;

use App\Models\File;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

class FileController extends Controller
{
    public function index()
    {
        $files = File::all();
        return view('file.index', compact('files'));
    }

    public function upload(Request $request)
    {
        $file = new File();
        $file->saveFile($request->file('upload-file'));

        return redirect(route('file.index'));
    }

    public function download(Int $fileId)
    {
        $file = File::find($fileId);

        return Storage::download($file->path, $file->name);
    }
}

アップロード時はModelに記述した処理で保存し、
ダウンロード時はDBに保存した情報をもとにしてファイルを返します。
PDFや画像をダウンロードせずにブラウザで表示したい場合は以下のように記述します。

        $file = File::find($fileId);
        $headers = [
            'Content-Disposition' => 'inline; filename="' . $file->name . '"'
        ];

        return response()->file($file->path, $headers);

File Storage - Laravel - The PHP Framework For Web Artisans

テスト

<?php

namespace Tests\Feature;

use App\Models\File;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;
use Tests\TestCase;

class FileControllerTest extends TestCase
{
    use RefreshDatabase;

    public function testFileUpload()
    {
        Storage::fake('public');
        $file = UploadedFile::fake()->image('temp.jpg');

        $this->post(route('file.upload'), [
            'upload-file' => $file
        ]);
        
        Storage::disk('public')->assertExists('test', $file->hashName());
    }

    public function testFileDownload()
    {
        Storage::fake('public');
        $file = UploadedFile::fake()->image('temp.jpg');
        $this->post(route('file.upload'), [
            'upload-file' => $file
        ]);

        $uploadedFile = File::first();
        $response = $this->get(route('file.download', ['fileId' => $uploadedFile->id]));
        
        $this->assertTrue($response->headers->get('content-disposition') == 'attachment; filename=' . $uploadedFile->name);
    }
}

アップロード

テスト用のdiskとしてpublic を、テスト終了後削除されるデータとしてtemp.jpg を作成します。
ファイルのpostを実行した後、public以下のtest(保存先にModelで指定したdisk)にtemp.jpgが存在することを確認します。
ファイル名はstoreAs()で指定しない限り一意なものになっています。

ダウンロード

アップロードと同様に、一度ファイルをアップロードして、
ダウンロードされたファイル名が保存したファイルであることを確認しています。

実行

ひとまずテストを実行してみると問題なく通ることが確認出来ます。

# php artisan test

   PASS  Tests\Feature\FileControllerTest
  ✓ file upload
  ✓ file download

  Tests:  2 passed
  Time:   2.62s

CircleCI

CircleCIのconfig.ymlも記載します。apt-getでインストールしているものは最低限のものです。
また、CircleCIで用いる設定ではDB_HOST127.0.0.1にしておくことは忘れがちなので注意です。

version: 2
jobs:
  build:
    docker:
      - image: circleci/php:7.4-apache
      - image: postgres:alpine
        environment:
          POSTGRES_DB: test
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres
    environment:
      - APP_DUBUG: true
      - APP_ENV: testing
    working_directory: ~/laravel
    steps:
      - checkout
      - run:
          name: Update apt-get
          command: sudo apt-get update
      - run: sudo apt-get install -y libpq-dev libjpeg-dev libpng-dev
      - run: sudo docker-php-ext-configure gd --with-jpeg
      - run: sudo docker-php-ext-install pdo pdo_pgsql gd
      - run:
          name: Setup Laravel testing environment variables for CircleCI test
          command: cp .env.testing .env
      - restore_cache:
          keys:
            - composer-v1-{{ checksum "composer.json" }}
            - composer-v1-
      - run: composer install -n --ignore-platform-reqs
      - save_cache:
          key: composer-v1-{{ checksum "composer.json" }}
          paths:
            - vendor
     - run:
          name: Run Phpunit
          command: php artisan test

まとめ

  • Storage::fake()のあたりが公式ページ通りに書いても上手く行かず、だいぶ手間取ってしまっていた
  • filesystems.phpでどこに保存先を指定しているのかをちゃんと理解しておく必要がある

失敗談

  • アップロードしたファイルのパスを間違ってstorage/以下ではなく、public/以下にしてしまったことでローカルではテストが成功するのにCircleCIでは失敗するという事態になった
  • php artisan storage:linkをCircleCIで実行することで解決はしたが、そもそもファイルの保存先を理解できていなかったのが問題
  • storage/framework/testing以下にテスト時のファイルが作成されるので、それを見ながら動作を確認することでデバッグしていた

参考サイト

ファイルを選択した時に自動でsubmitを行う

概要

よくあるフォームでは、ファイル選択ボタンをクリック→ファイルを選択→送信ボタンをクリック→ファイルを送信という処理を行うことが多いと思います。 今回はファイル選択ボタンをクリック→ファイルを選択→ファイルを送信という処理を行ってみました。

原型

See the Pen Automatically upload file on file selection by ryu022304 (@ryu022304) on CodePen.

$(this).val('')で値を初期化しなかった場合、confirmで一度アップロードをキャンセルし、再度同じファイルを選択した時にchangeイベントが発火しませんので注意が必要です。

Bootstrapを利用

Bootstrapを使ってボタンをそれっぽくすると以下のように出来ます。

See the Pen Automatically upload file on file selection by bootstrap by ryu022304 (@ryu022304) on CodePen.

まとめ

onclickで行けるかと思ったが上手く行かなかったので、調べてみたらonchangeを使おうという話だった。

参考サイト

自作PCに挑戦してみた

転職して引っ越すついでに大学入学時から使っていたノートPCを処分して自作PCに挑戦してみたので内容を書いてみる。

構成

構成はほぼ以下のサイトを参考にした。値段は自分が購入した時(2019/12末)の価格で、全てAmazonで購入した。

artjuku.com

種類 購入製品 値段
CPU AMD Ryzen 5 3600 26,399
GPU NVIDIA GeForce GTX 1660 26,193
マザーボード ASRock B450M Steel Legend 9,806
ストレージ SanDisk 500GB 7,051
メモリ DDR4 3200M 8GB×2(16GB) 8,780
CPUクーラー なし(CPUに付属) 0
電源 玄人志向500W 4,719
ケース P7 Silent 6,115
OS Windows10(オンラインコード版) 17,926
合計 106,989

ということで約10万ぐらいで揃えられた。OSの値段を抜いたら89000円ぐらいなので参考サイトの値段感通りだった。細かく言うならキーボードとかケーブルとかディスプレイとか買ったのでもうちょっとかかったが、ひとまず動くところまではこんな感じ。
ケースが透明になっているのがあまり好きではなかったので、ケースだけ参考サイトから変更している。

組み立て

事前準備

ドライバーは大きいものと細いものの二つが家にあったので、特に工具を新しく買ったりはしなかった。
しかし、先端が磁石になっているドライバーは買っておけばよかったと後悔した。奥まったところをねじ止めする必要が何回か発生したので、普通のドライバーだとネジがグラグラして結構難しかった。確実に磁石付きのやつがあった方が便利だったなあと後になって思った。

実践

以下の動画と説明書を観ながら頑張った。やっぱりこういうのは動画があるとすごい助かる。動画はマザーボードが同じなら大体組み立て方も一緒かなと思って適当に選んだけれど正しかったのかは分からない。
組み立て自体は動画通りに進めていけばほぼ大丈夫だった。初めての自作PCで結構ドキドキしながら電源を入れたが普通に起動したので安心した。

www.youtube.com

大変だったこと

コードが届かない

電源からマザーボードへのケーブルが一部どうやっても物理的に届かないという状況に直面した。調べてみたら結構あるあるな話のようで、延長ケーブルを使えば基本問題なく解決可能な様子。しかし、引っ越したばかりで近所のどこでそんなものが買えるのかも分からず、またAmazonで注文するのも面倒なので色々試行錯誤していた。
結局電源の根元らへんでまとめられていた結束バンドを切ったら届くようになった。(結束バンドが見えていなかった)。

OSの調達

Windows10 Homeのパッケージ版を買おうと思って年始に近くの電器屋を巡ったが、どこにも置いておらず戸惑った。年始に皆自作PCしたくなったりしてるんです?
仕方がないので、自分でWindows10ブート用のUSBメモリを用意し、Amazonでオンラインコード版を購入することでどうにか解決した。自分が使えるPCがMacしかなかったこともあり、この作業が一番面倒臭かった。以下手順。

用意するもの

  • USBメモリ(8GB以上)
    公式で5GB以上必要だと言っているので8GBのUSBメモリなら問題なく使えた。

  • インターネットに接続可能なPC
    インターネットからISOファイルを落としてOSブート用のUSBメモリを作成するので、当然ながらPCが一つ必要になる。WindowsMacで作成の方法が違っていて、Windowsの方が楽にできそうに見える。今回はMacで作成した。

ISOファイルの取得

公式では以下のサイトから取得することになっている。

www.microsoft.com

しかし、問題が一つあり、2020年1月現在、このサイトからは最新版である2019年11月アップデートのバージョンしか取得することができない。以前は同サイトで以前のバージョンを取得出来ていたようで、その為の解説記事をいくつか見たが現在はその手法(ユーザーエージェントを変更する等)では出来なくなっていた。
これがどう問題になるのかは後述する。
以前のバージョンが必要だった為、以下のサイトから取得した。怪しいサイトではないが、公式ではないので使う際は自己責任だ。

tb.rg-adguard.net

選択は以下のようにした。(2018年9月のバージョンを取得)

選択項目 選択内容
Select type Windows (Final)
Select version Windows 10, Version 1809〜(build 17763.1)
Select edition Windows 10
Select language Japanese
Select file Win10_1809_Japanese_x64.iso

USBメモリのフォーマット

USBメモリを空にする為、フォーマットする。Macでは使用するUSBメモリを挿した後、「Finder->アプリケーション->ユーティリティ->ディスクユーティリティ」でフォーマットする為の設定を開ける。
使うUSBメモリを選択して「削除」をクリックすると、どのファイルシステムでフォーマットするのかを選ぶことになるので、ここで「MS-DOS(FAT)」を選択する。上述の問題はここに関係してくる。
私の環境だとexFATでフォーマットするとUSBメモリマザーボードに認識されず、USBブートすることが出来なかった。その為、FAT(32)でフォーマットしてやり直したが、今度はインストーラは立ち上がったものの、install.wimが読み込めないというエラーになってしまう。色々調べていたら以下の記事を見つけた。

qiita.com

要するにFAT32では4GBまでのファイルしか書き込めないのだが、最新版のISOでブート用のUSBメモリを作成するとinstall.wimが4GB以上になってしまうので、うまく書き込めておらずエラーになっていたということだ。その為install.wimが4GB以下のバージョンのISOファイルが必要だったのである。

ISOファイルからブート用USBメモリの作成

コマンドを使ったやり方もあるが、UNetbootinを使えば非常に簡単に作成できる。

ライセンスキー取得

インストールさえできればWindows10自体は利用できるが、いくつかの機能が制限されているかつ規約的にはよろしくない。Amazonでオンラインコード版を購入すればライセンスキーを取得できる。

ディスプレイが映らない

正確には1週間経過したら映らなくなった。この時点でディスプレイが悪いのかGPUが悪いのか分からなかったので、GPUを別のディスプレイに繋いだりディスプレイをMacに繋いだりして切り分けを行った。結局ディスプレイが映らないということになっていたので、丁重に返品して別のディスプレイを再度注文して問題解決。

まとめ

楽しかった。PC内部がどんな感じになっているのかというのを改めて勉強できて非常に為になった。
学生の時にやっておいた方が良かったかなとも思ったが、お金がないと出来ないことなのでそれは難しかったか。

余談

去年まで埼玉に住んでいたが、以前使っていたPCの処分は以下のリネットというサービスを利用した。

www.renet.jp

パソコンを無料で回収してくれるし、小型家電も一緒に回収してくれたので非常に良いサービスだった。
集荷に来た佐川急便さんがちゃんと午前中に来ていたらもっと良いサービスだった。これはリネット社ではなくて佐川急便側の問題なんだろうけどもね。

2020年の抱負

あけてましたおめでとうございます。
社会人になって2年目に入って転職したり九州に戻ったりと色々ありました。去年頭に2019年の抱負とか書いていたので今年も書いてみたいと思います。

2019年にやったこと

  • 1月 プロコン(AtCoder)を始める
  • 3月 Vue.jsの勉強開始
  • 6月 AWSクラウドラクティショナーの資格を取る
  • 8月 転職活動開始
  • 9月 キャンプ
  • 10月 転職先確定
  • 12月 退職、引っ越し

2019年詳細

プロコン

始めてみた。まだ茶色なので精進したい。
最近全然参加できていないので再開したいところ。

Vue.js

web系の言語、フレームワークも勉強しておきたいと思って勉強を始めた。結果的にこれとSlimとかを勉強していたおかげで転職はスムーズに進んだ気がする。

AWS

最初Kubernetesを勉強しようとしていたら寄り道してAWSが気になり、そのままプラクティショナーを取った。
次はアソシエイトレベルを取るよう頑張らねば...。

キャンプ

後輩たちと千葉に行っていた。テント立てたり肉焼いたり焚き火したりして楽しかった(小並感)。ゆるキャン△タブレットで流しながら焚き火を眺めるのは趣があった。
以下学び

  • 移動が電車はきつい
  • 焚き火はコツがいる
  • 天気はすごく重要
  • 複数回行く予定があるなら道具は揃えた方が良さそう

転職・引っ越し

しました。
そこそこ色々あったので別記事に書きたい所存。 関東から九州に戻ってきています。
職種的にもインフラから開発寄りになったので一層頑張らないといけないなあと。

前年振り返り

  • 【未】GitHubで毎日草を生やす
    毎日は無理だったよ...。どうしても帰宅時間が日を跨いでしまったのもあれば普通にサボってしまったのもあり。
  • 【未】定期的なブログ
    Qiitaとはてなを合わせて2019年に書いたブログは5本。ネタはあるような気もするけどやっぱ文章を書くというのが習慣化していないと結構難しい。
  • 【済】新しい言語
    挑戦した言語・フレームワークとしてはVue.js、React.js、Rubyrails、Slim、Laravelでまともに使ったのはVue.jsとSlim・Laravel。仕事で特に使うことになるのもこれらなので引き続き頑張りたい。
  • 【済】プロコン挑戦
    後輩を巻き込んだりしつつ、基本Pythonで挑戦した。結果はイマイチだがPythonでコードを書くときに役立ったこともあったので若干の成長は感じた。
  • 【未】機械学習
    Web系に興味が移ろい、あまり進められなかった。仕事的にもちょっと優先度が下がってしまった感...。
  • 【済】転職
    色々あったができた。よかった。

2020年目標

  • アウトプット頑張る
  • PHP(Laravel)を頑張る
  • AWSの資格を取る
  • 何か新しいこと始める

2020年詳細

アウトプット

去年達成出来なかったので今年こそ頑張っていきたい。月一と考えて12本のブログとどこかの勉強会とかで登壇することが目標。

PHP(Laravel)

単純に仕事でメインで使うことになったことが理由。まだチュートリアルを流した程度なので、より実践的な実装を経験してレベルを上げていきたい。

AWSの資格

今度こそ業務で使うのでしっかり勉強して活かしたい。ひとまずアソシエイトの3つを取ることが目標。

新しいこと

色々と環境も変わったので、言語とかでなく趣味として何か新しいこと始めてみたいなーと思う。スポーツとか格闘技とかちょっと興味が出てきた。キャンプも楽しかったし一人でも行ってみるか...。