オンライン英会話 はじめました【英語のできないエンジニアの英語学習記】

2021/01/20 より、スパトレというオンライン英会話を受け始めました。

調べた限りで、毎日レッスンが可能なプランがあるオンライン英会話のサービスの中で最安値(税抜き月額¥2,980)。上位プランとして無制限のプランもあり、+2,000円ほどの料金設定になっています。7日間のお試し期間があり、どちらのプランも選択できたので無制限プランを選択してみました。
他のオンライン英会話サービスと比べて面白いと感じたところは、フリートークのレッスンが一切なく、基本的には教材ベースでレッスンが進んでいく点でした。教材に関しては幾つかのオリジナル教材と指定の市販教本から選択でき、指定の市販教本は自前で用意する必要があります。ただ、オリジナル教材(無料)は潤沢といえるほどでもなく、また選べる市販教本も豊富といえるほどでもないなと感じました。もちろん全部買おうとしたらかなりの金額になるのは間違いないくらいには選べました。それに、そんなに買わなければならなくなるまえにはしゃべれるようになりたい、むしろオリジナル教材だけでしゃべれるようになりたいです。

初回は実力テストを行う必要があるので、テストしてもらいました。

いつかは英語を喋ったり、英語の技術情報がスラスラと読めるようになればなと、自分で買っていたテキスト「速読速聴・英単語 Basic2400」を読むようなことは、思い出すたびにしてきましたが結果は散々でした。

チャートグラフの欠点を大いに実感できるパラメータに・・・。左と真下がどうやら0のようで、値が詰まりまくってて何の項目だったかまるで分らない状態です。公式のHPにある例のグラフはちゃんと読めるようになっていたので、それを参考に読み解くことができたのが幸いでした。それにしてもこんなに小さなグラフになるとは・・・。

CEFR

** A1 ** : 最下層かい!中一レベル(今は違うのかな)でした。先ほどの書籍は中学レベルからのおさらいなので奇しくもレベルに合ったものを読んでいた結果に・・・。

言語認識 (dictation)

2/10 : 初級学習から3か月以内で今回のテストの内容がすべてリスニングできるようになるので安心してくださいとのコメントが。ほんかよ・・・。全くわからなかったぜ・・・。

意味理解 (listening)

0/10 : 0ってなんなの?意味わかってないけど、言語の認識はしてたってことか?なんにせよ、これが0だと英(会話)には絶対にならんよね。

データベース (vocabulary)

2/10 : 意味は理解できないけど 2/10 くらいは単語把握してるっぽい・・・。

組み立て (speaking)

5/10 : こわっ!これでしゃべりがここまでできてるってどういうことなんだ・・・。理系志向だと辻褄ってものがあってない感満載なんだが・・・。

インタラクション (interaction)

4/10 : 簡単な単語を使って作られた1文程度の文章なら理解できる・・・だと?

文法 (grammar)

0/10 : 日本人は文法はマニアなくらい知ってるよね?っていう日本の英語教育を受けてきたとは到底思えないスコアだ・・・。

音声化 (pronunciation)

3/10 : よく知ってるフレーズに関しては流暢だけど、そうでないと途端日本語じみてきますね。みたいなニュアンスが書かれてる。

チャートには Lexile指数というものがあって、解説にはない。
また解説にはあるがチャートには CEFRはない。内容的にはイコールではないはずだがどうなんだろう。

この診断結果には、各項目の解説の終わりにおすすめの教本が紹介されている。市販教本が多く紹介されているが、自分の結果とマッチさせるとたまたまこうなったのか、いつも市販教本が大目に紹介されるかはよくわからないが、オリジナル教材をざっと見た限り、文法系や単語系はそもそもよういしていなさそうではあった。まあ、このあたりは教本は紹介されているけど、同程度の本をお持ちなら自分で見直してみてくださいみたいなことも書いてあるから、サービスとして重視している部分が違うってことなのだろう。

レッスンの感想

テストを受けた翌日から、日曜を抜かして毎日レッスンを受けてみた。あまりにもテストが散々だったので、オリジナル教材の中で一つだけある超初心者向けレッスン(全10回)を受けてみている。日に1つから2つほどレッスンが進む。いまなら小学生がするような内容のレッスンだが、なかなか口から英語が出てくれない自分にはむしろぴったりに感じた。ここで見栄を張って難しそうなレッスンから始めようとしなくてよかった。

このサービスの面白い点は、各トレーニングに対して宿題がある点です。レッスンを始める前までにその教材に対してどういう学習をしてくればいいのかが記されています。”とりあえず英会話をしてみる”というスタンスが不安な方はむしろこの宿題がいい予習になってやりやすいんじゃないかと思いました。かならず復習してくださいと出ている点も、授業後にその授業内容の録画が送られてくるのですが見直す契機になってくれます。

テストを受けた直後はむちゃくちゃ委縮して続けられないんじゃないかと思いましたが、トレーニングの幅の広さと事前事後の学習の後押しなどのおかげで、超初心者コースが終わった後は何を受けようかなどと考えられるくらい楽しめています。また、その会話外の学習量がそれなりにあるため、一日何回も受けるのは初心者にはむしろ効率的ではないのかなと感じましたので、お試し期間後は通常プランに戻そうと思いました。

技術書典9を終えて、技術書典10に向けて

サークルの紹介

技術書典
https://techbookfest.org/organization/5754486291169280

Booth
https://asobitagari.booth.pm/

技術書典9で頒布したもの

Angular Panic!

Angular入門本。
緩いストーリー仕立てで話が展開され、簡単なアプリケーションの開発までができるようになるまでを解説。

Re:ゼロから始めるSlack Hubot開発

Hubot本
初めてHubotを作る方向けの解説と、筆者が実際に職場のHubotへ実装した、機能の実装例を紹介。
著者はサークルメンバーの”PG marbo”

技術書典10

技術書典10に向けて、新たにGOでAPIサーバを作るまでの本を書こうと思っています。もともと「Angular Panic!」は中止になった技術書典8に物理本として頒布しようと考えていたものをオンライン開催となった技術書典9で、電子書籍のみで頒布を行いました。この経験と、このイベントで買った複数の電子書籍と、ほかのメディア(Kindle, honto, BookLive!)などで買った電子書籍を呼んできた経験から、次の技術書典10もオンライン開催となることを意識して電子書籍としてもっとあるべき姿があるのではないかと感じるようになりました。
その電子書籍として、電子書籍の技術書として向かうべき道の模索をかねて次の書籍は出版したいと考えています。
お楽しみしていただけると幸いです。

負荷テストツール

負荷テストを行うためのツール

いままでJMeterか、簡単に行うならApach Benchぐらいしか選択肢がなかった負荷テストツールですが、最近いくつか新しいツールを教えてもらったので、忘れないようにメモ。
こういう面にもアンテナを伸ばしていかないと、エンジニアとして後れを取ってしまうなぁと感じる今日この頃。そのうち、ここに焦点を当てた記事も書いていきたい。

JMeter

負荷テストといったらこれ。といった印象。というか、最近までこれ以外の方法をろくに知らなかった(apach benchをのぞく)。
macで作ったシナリオをubuntuに持って行ったとき、バージョンが合わずに動かなくて苦労したことがある。GUIが使える環境かどうかでJMeterのバージョンも変わる。その時は結局ubuntu側に諸々入れてmacのバージョンに合わせた。そんなubuntuのインスタンスを各リージョンに立てて、システムにアクセスさせるテストを行ったことがある(AWS)。

https://jmeter.apache.org/

Vegeta

最近知った負荷テストツール。Golang製であるのが売りだろうか。つまりJavaじゃない。

https://github.com/tsenart/vegeta

Gatling

軽量でスケールアウトし、スクリプト(Scala)でシナリオ(テスト)をつくれてxmlがいらないやつ。でもJDK8以上が必要。

https://gatling.io/

Tsung

動作が軽い。付属ツールでHTMLでのレポートを出力可能。スレッド数での負荷調整ではなく、秒間〇セッションといった風な調整方法なので、そのまま秒間〇アクセスといった目標値を設定しやすい。

dockerコンテナ

dockerコンテナ

状態/ライフサイクル

dockerコンテナはイメージと違い、状態を持っている。状態は、実行中・停止・破棄がある。

実行中

docker container runで起動させると実行中となり、Dockerfileに記述されたCMDのコマンドを実行し終わるまで自動中となる。
よって、デーモン/サーバー系のコマンドであれば任意に停止、もしくは異常終了するまでそのコンテナは実行中となるが、そうでない場合(lsコマンドなど即座に終了するもの)は、そのコマンドを終えるまでが実行中となる。
CMDの実行が完了すると、コンテナは停止の状態へ移行する。

停止

実行中であったコンテナが停止した状態。停止した状態なので、再利用が可能。停止した時点の情報を持っているので、ディスクなどの容量は使用している。

破棄

停止状態のコンテナは明示的に破棄をしない限りディスクに残り続ける。頻繁に実行->停止を繰り返す運用の場合には、停止されたコンテナがたまるため(再利用されない限りは実行のたびに新たなコンテナが立ち上がる)、ディスク容量を圧迫していくことになる。完全に不要となったコンテナは削除を行った方がいい。
ただし、一度破棄したコンテナを再び利用することはできないため、退避しなければいけない情報がないか確認してから行うこと。

コンテナ操作

dockerのコンテナは、dockerイメージから作成を行う。作成が完了されると実行状態となる。
イメージの指定方法は、イメージ名かイメージに割り振られたIDを指定することができる。

イメージ名での作成

1
docker container run [options] イメージ名[:タグ] [コマンド] [コマンド引数...]

イメージIDでの作成

1
docker container run [options] イメージID [コマンド] [コマンド引数...]

名前付きコンテナ

イメージからコンテナを作成した場合、コンテナの名前は自動で割り振られる。

docker container ls [--all]を行った際にNAMES列に記載されているのが自動で割り振られたコンテナの名前。
オプション--allを指定することで、停止中のコンテナについている名前も確認することができる。この名前を利用して、再利用することも可能。
また、コンテナ起動時にオプションで名前を付けることもできる。

1
docker container run --name [任意のコンテナ名] [イメージ名]:[タグ]

イメージの指定の仕方はコンテナの起動の項目を参照。
ホスト側のポートは省略することができ、省略時は自動で空いているエフェメラルポートが割り当てられる。
割り当てられたポートはdocker container lsで表示されるportsの項目で確認できる。

実行中コンテナの標準出力を取得

1
docker container logs [-f] コンテナID/コンテナ名

-fをつけるとtail -fのように、指定したコンテナの標準出力を取得し続ける。

実行中コンテナでコマンドの実行

1
docker container exec [options] コンテナID/コンテナ名 コンテナで実行したいコマンド

-i -i / -it sh で実行中のコンテナにシェルで操作ができる。

コンテナとのファイルコピー

コンテナからホスト

1
docker contaner cp [options] コンテナID/コンテナ名:コピー元パス コピー先ホストパス

ホストからコンテナ

1
docker container cp [option] コピー元ホストパス コンテナID/コンテナ名:コピー先パス

コンテナの破棄

1
docker container prune [options]

停止中のコンテナを一括削除できる。

イメージの削除

1
docker image prune [options]

不要そうなdockerイメージをdockerが判断して削除してくれる。

いろいろ削除

1
docker system prune

停止中のコンテナ、ネットワーク、イメージ、ビルドキャッシュといった内容の削除をしてくれる。

コンテナの統計情報を取得

docker container stats [options] コンテナ名/コンテナID[ ...(複数指定可)]

Docker メモ

Dockerfile

インストラクション

FROM

 FROMは作成するDockerイメージのベースとなるイメージを指定でいる。
 FROMで指定できるDockerイメージはDocker Hubに公開されているものから指定できる。

LABEL

 イメージ作者の情報などを記述。

ENV

 Dockerコンテナ内で使える環境変数を設定できる。

ARG

 ビルド時に指定する引数から値を受け取ることができる。
 Dockerfile内で指定したARGの引数と、ビルド時に指定する引数はそろえる必要がある。

1
2
3
4
5
6
#コマンド:sampleargがそろえるべき名前
> docker image build --build-arg samplearg=okok -t example/dockerimage .

#Dockerfileでは以下のように名前を指定して二行目のように値を取り出すことができる。
ARG samplearg
ENV BUILD_ARG=${samplearg}

RUN

 RUNはDockerイメージビルド時に、Dockerコンテナ内で実行するコマンドを定義する。
 RUNの引数には実行したいコマンドをそのまま記述する。

COPY

 COPYはDockerを動作させているホストマシン上のファイルやディレクトリをDockerコンテナ内にコピーするためのインストラクション。

CMD

 CMDはDockerコンテナとして実行する際に、コンテナ内で実行するプロセスを指定する。
 RUNはイメージをビルドするために使い、CMDはコンテナ起動時に一度実行される。

ENTRYPOINT

 ENTRYPOINTにはコマンドを記述する。CMDはENTRYPOINTへの引数となる。–entrypointでrun時に指定することで上書きできる。

ビルド

1
docker image build -t イメージ[:タグ名] Dockerfileまでのパス

タグ名は省略するとlatestとなる。

イメージからコンテナの実行

1
docker [container] run [-d] [-i] [-t] [-rm] [-v ホスト側ディレクトリ:コンテナ側ディレクトリ] イメージ名[/追加のパス]:タグ名

-dオプションをつけないとフォアグランドで実行されてしまう。-dをつけて起動した場合はコンテナIDが標準出力に出力される。
containerは省略可能だが、最近の風潮ではタイプが長くなるがつけて記述するほうが好まれるらしい。

-i起動後にコンテナの標準入力との結びつきを維持する。

-t疑似端末を有効にする。大抵の場合-iと同時に用いられ、同時指定の-itが省略形として存在する。コンテナ起動後に、疑似端末が有効となり標準入力からコマンドを実行できるようになる。

-rmコンテナの終了時にコンテナを破棄する。

-vホストとコンテナ間でディレクトリやファイルの共有を行う。

そのほかオプション

-f Dockerfileのファイル名を指定できる。省略時はDockerfile

--pull=true ビルド時にFROMで指定したイメージをレジストリからダウンロードを必ず行う。省略時は、すでにダウンロード済みであれば、ホスト内のキャッシュからビルドを行い、存在しない場合はレジストリからダウンロードする。

起動中のコンテナの確認

1
2
docker container ls
docker ps

上記二つはどちらも同じ動作。
表示項目のフィルタリングもできる。コンテナIDだけ抽出する場合は以下。

1
docker container ls --filter "ancestor=[イメージ名]" [-q]

-q でコンテナIDのみの抽出

起動中のコンテナの停止

1
docker container stop コンテナID/コンテナ名

docker container lsと組み合わせることができる。

1
docker container stop $(docker container ls --filter "ancestor=[イメージ名" -q])

停止中のコンテナの再起動

1
docker container restart コンテナID/コンテナ名

停止中のコンテナの破棄

1
docker container rm [-f] コンテナID/コンテナ名

-fオプションで実行中のコンテナの削除も可能。

dockerイメージの検索

1
docker search [options] 検索キーワード

-f, --filter filter 出力をフィルターする。
--format 文字列 出力をフォーマットする。
--limit 数値 表示件数を指定の数値に制限する。
--no-trunc 出力を省略せずに表示する。

dockerイメージの取得

1
docker image pull [options] リポジトリ名[:タグ名]

例によってタグ名を省略した場合はlatestが指定される。

ホスト内のイメージの一覧を取得

1
docker image ls [options] [リポジトリ[:タグ名]]

ダウンロード済み、ビルド済みのイメージの一覧を表示する。

dockerイメージのタグ付け

1
docker image tag 元のイメージ名[:タグ名] 新しいイメージ名[:タグ名]

タグ名を省略時はlatest

docker Hub へログイン

1
docker login [-u id] [-p パスワード]

オプションを省略した場合は対話式に進めることができる。ID&PASSを入力して認証する。

docker hub イメージの登録

1
docker image push [options] リポジトリ名[:タグ名]

ログイン済みであれば、自分のリポジトリにイメージを登録することができる。

ポートフォワーディング

ポートフォワーディングはdocker container runの起動コマンド時に-pオプションで指定できる。

1
docker container run -d -p [ホストポート]:コンテナポート イメージの指定