VSCodeのターミナルで使うシェルを変更する方法(2021)
2021年4月のアップデートで、VSCodeのversion 1.56にてターミナルに使用するシェルの設定方法が変更されています。 私用PCの方の設定をzshに変更しようとしてちょっと調べたので備忘録です。
今までだと以下のように記述していたものがdeprecatedと表示されるようになりました。
"terminal.integrated.shell.osx": "/bin/zsh"
新しい設定の方法だと以下のように記述すれば同じ設定が可能です。私は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によるホットリロードの確認まで行っています。
結構苦労したので書き残しておきます。
内容
ディレクトリ構成
動作確認しか行っていないので、必要最低限のもののみ入っています。
. ├── 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
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
概要
MacでPHPのバージョン管理を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
とあり、解決した。
$ 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_HOST
を127.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で購入した。
種類 | 購入製品 | 値段 |
---|---|---|
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で結構ドキドキしながら電源を入れたが普通に起動したので安心した。
大変だったこと
コードが届かない
電源からマザーボードへのケーブルが一部どうやっても物理的に届かないという状況に直面した。調べてみたら結構あるあるな話のようで、延長ケーブルを使えば基本問題なく解決可能な様子。しかし、引っ越したばかりで近所のどこでそんなものが買えるのかも分からず、またAmazonで注文するのも面倒なので色々試行錯誤していた。
結局電源の根元らへんでまとめられていた結束バンドを切ったら届くようになった。(結束バンドが見えていなかった)。
OSの調達
Windows10 Homeのパッケージ版を買おうと思って年始に近くの電器屋を巡ったが、どこにも置いておらず戸惑った。年始に皆自作PCしたくなったりしてるんです?
仕方がないので、自分でWindows10ブート用のUSBメモリを用意し、Amazonでオンラインコード版を購入することでどうにか解決した。自分が使えるPCがMacしかなかったこともあり、この作業が一番面倒臭かった。以下手順。
用意するもの
インターネットに接続可能なPC
インターネットからISOファイルを落としてOSブート用のUSBメモリを作成するので、当然ながらPCが一つ必要になる。WindowsとMacで作成の方法が違っていて、Windowsの方が楽にできそうに見える。今回はMacで作成した。
ISOファイルの取得
公式では以下のサイトから取得することになっている。
しかし、問題が一つあり、2020年1月現在、このサイトからは最新版である2019年11月アップデートのバージョンしか取得することができない。以前は同サイトで以前のバージョンを取得出来ていたようで、その為の解説記事をいくつか見たが現在はその手法(ユーザーエージェントを変更する等)では出来なくなっていた。
これがどう問題になるのかは後述する。
以前のバージョンが必要だった為、以下のサイトから取得した。怪しいサイトではないが、公式ではないので使う際は自己責任だ。
選択は以下のようにした。(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が読み込めないというエラーになってしまう。色々調べていたら以下の記事を見つけた。
要するにFAT32では4GBまでのファイルしか書き込めないのだが、最新版のISOでブート用のUSBメモリを作成するとinstall.wimが4GB以上になってしまうので、うまく書き込めておらずエラーになっていたということだ。その為install.wimが4GB以下のバージョンのISOファイルが必要だったのである。
ISOファイルからブート用USBメモリの作成
コマンドを使ったやり方もあるが、UNetbootinを使えば非常に簡単に作成できる。
ライセンスキー取得
インストールさえできればWindows10自体は利用できるが、いくつかの機能が制限されているかつ規約的にはよろしくない。Amazonでオンラインコード版を購入すればライセンスキーを取得できる。
ディスプレイが映らない
正確には1週間経過したら映らなくなった。この時点でディスプレイが悪いのかGPUが悪いのか分からなかったので、GPUを別のディスプレイに繋いだりディスプレイをMacに繋いだりして切り分けを行った。結局ディスプレイが映らないということになっていたので、丁重に返品して別のディスプレイを再度注文して問題解決。
まとめ
楽しかった。PC内部がどんな感じになっているのかというのを改めて勉強できて非常に為になった。
学生の時にやっておいた方が良かったかなとも思ったが、お金がないと出来ないことなのでそれは難しかったか。
余談
去年まで埼玉に住んでいたが、以前使っていたPCの処分は以下のリネットというサービスを利用した。
パソコンを無料で回収してくれるし、小型家電も一緒に回収してくれたので非常に良いサービスだった。
集荷に来た佐川急便さんがちゃんと午前中に来ていたらもっと良いサービスだった。これはリネット社ではなくて佐川急便側の問題なんだろうけどもね。
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、Ruby、rails、Slim、Laravelでまともに使ったのはVue.jsとSlim・Laravel。仕事で特に使うことになるのもこれらなので引き続き頑張りたい。 - 【済】プロコン挑戦
後輩を巻き込んだりしつつ、基本Pythonで挑戦した。結果はイマイチだがPythonでコードを書くときに役立ったこともあったので若干の成長は感じた。 - 【未】機械学習
Web系に興味が移ろい、あまり進められなかった。仕事的にもちょっと優先度が下がってしまった感...。 - 【済】転職
色々あったができた。よかった。
2020年目標
2020年詳細
アウトプット
去年達成出来なかったので今年こそ頑張っていきたい。月一と考えて12本のブログとどこかの勉強会とかで登壇することが目標。
PHP(Laravel)
単純に仕事でメインで使うことになったことが理由。まだチュートリアルを流した程度なので、より実践的な実装を経験してレベルを上げていきたい。
AWSの資格
今度こそ業務で使うのでしっかり勉強して活かしたい。ひとまずアソシエイトの3つを取ることが目標。
新しいこと
色々と環境も変わったので、言語とかでなく趣味として何か新しいこと始めてみたいなーと思う。スポーツとか格闘技とかちょっと興味が出てきた。キャンプも楽しかったし一人でも行ってみるか...。