ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

Behaviorの名前空間を変更しようとしたら、できませんでした。

Controllerも階層深くできるし、いけるっしょと考えていました。

試す

とあるTableクラス

<?php
// ...
  $this->addBehavior('Register', [
      'className' => 'App\Model\Behavior\Users\Register'
  ]);
// ...

ディレクトリとnamespaceを変更したBehavior

<?php
namespace App\Model\Behavior\Users; // <- ①
// ...
class RegisterBehavior extends Behavior
{
  // ...

これでいけると思った。

しかし、色々不具合が。

PHPStormで開発していますが、①のnamespaceのところを定義すると、Declaration of referenced constant is not found in built-in library and project files. ていうエラーが波線が表示されます。

よくわかりませんが、補完で定義すると、治りました。イミフ。

また、動作でもエラーが発生しました。

Missing Behavior

わかりやすいですね。見つからない。なんでや!

色々コアのソースを覗いてみたけど、namespaceをパスとして認識しないようになっているので、ロードするディレクトリを増やさないとダメなんだろうけど、よくわからん。

つーか、ドキュメントに明記されていた

https://book.cakephp.org/3.0/ja/orm/behaviors.html

ビヘイビアクラスは App\Model\Behavior 名前空間または MyPlugin\Model\Behavior 名前空間に存在する必要がある。

( ゚д゚)・・・

なるほど。

おわり

転職すると母に伝えたら、すごく怒られた

今度転職します。ということが、最近決まりました。

全く通ると思っていなかったから、びびったけど、興味がある、というか、是非いきたい!という業種だったので、自分としてはすごくうれしい。

また、まだちゃんと分からないが貰える額も良いらしい。いいじゃないか。興味があることをやって、お金が貰える。最高じゃないか。

彼女には事前に話ししていた。仲の良い同僚にも事前に話をしていた。寂しそうな人もいるが、みんな喜んでくれている。みんないい人だ。

今いる会社は嫌いとか不満とかそういうのはあまりなかった。じゃあ何故転職したかったの? 開発のスキル。または、開発経験をもっと積みたかったから。さらに言えば、もっとプログラマーが溢れる場所で仕事がしたかった。それに尽きる。絶対伸びると信じてるからだ。

給与が下がるのが怖かったでもあるが、もともとは13万で東京で暮らしていた頃もある。まぁ、貯金ができている今は大丈夫だろう。と、考えている。

さて、タイトルにもある。彼女、同僚。と、続けて大丈夫だった。なので、そのノリで母に話をしたら、すごく怒られた。

あれー? いまより良くなるかもしれないよー? うれしくないの? と思っていた。

私は実家で住んでいる。なので、こういう生活の話は言わずともすぐにバレるので、先に話すことが吉と思ったからだ。(前、黙っていたらものすごく怒られた)

「どうしてそんな年数を立たずに転職するのか?」「安定してきたのに、わざわざ手放すのか?」「転職先に騙されていないか?」など、ガンガン言われ続ける。

確かに今の場所は1年くらいしか立っていない、IT業界ではそんな状況ざらにあると思うけど。。。

まぁでも、その前は実力なしフリーランスだったので、お金はそんなに入ってこなかった。また、もっと前を話せば、4年ほど務めた会社は日々頑張る割には給与が少なかったので、まぁ母からしたらすごく心配なんだと思う。

前の会社のときは、たしかにひどかったと思う。あのときは、会社も悪いところはあったと思うが、今思い返して見れば、自分に落ち度もあったと思っている。営業の仕方、プログラムの仕方、人の育て方。自分だけ、自分だけでやろうとして、人に頼るということを考えていなかった。全部自分でできると信じていた時期があった。

その時、本当に本当に勝手に自分だけでいっぱいいっぱいになって、携帯を自分で折った(ガラケーです)ことがあった。社長から怒りの電話を取ることが本当に怖かったのだ。

パソコン開いて、今日は休みます。的なメールを送信して、布団にくるまって。意味もなく時間だけが過ぎるのをまって眠ったふりをしていた。仕事をサボっていた。

その時、母が部屋を開けた。恐らく仕事をサボっているのはバレていたと思うが、何も言わず、頭に手をおいてやさしくなでてくれた。仕事の話は一切しなかったので、なんにもわからないだろうが、心配だったのだろう。部屋から母がでた後、すごく泣いた覚えがある。

ということで、私なりにはわかってもらうために話さないといけないな。と、思っていたのですが、母の心配を再発させた感じになりました。。。あー、もうちょういIT業界のことをちゃんと話せばよかった。

まあ、ほとんどの人はそうだと思うが、いまだにどうやって稼いでいるのかわからないらしい。HP(ホームページ)ってなに? なんでそんなに高いん? Googleって検索サイトのことでしょ? そんな会社存在するの? こんな感じの人。心配されるのもしょうがないかな。

次はレベル高いと思うので、自分は必死になると思うけど、うまくいったら、家族をもう少し安心させきれるように、遊びの旅行代を全額出すとか、少しの親孝行でもできたらなぁと思う。

こういうのが(うまくいけば)すぐできるIT業界ってやっぱりいいなぁと思った。

※ちなみに、親父は何もわかっていないと思うが、昔から反対はほとんどしないので、「いいんじゃない?」といってくれました。他からしたら、「いい親父さんや・・・!」と思うかもしれませんが、家族代表から言わせてもらえば、何も考えていないと思いますorz 親父らしい。

【CakePHP3.x】PhpStormにてPHPUnitをデバッグしたときのエラー

環境

$ sw_vers 
ProductName:  Mac OS X
ProductVersion: 10.11.6
BuildVersion: 15G1212

'TMP'が定義されていない

Use of undefined constant TMP - assumed 'TMP'

なんぞこれ?

コードを追っていくと、下記コードでエラーが発生していた。

    // ...
    protected static function _defaultConfig($name)
    {
            $defaults = [
            'php' => [
                'cookie' => 'CAKEPHP',
                'ini' => [
                    'session.use_trans_sid' => 0,
                ]
            ],
            'cake' => [
                'cookie' => 'CAKEPHP',
                'ini' => [
                    'session.use_trans_sid' => 0,
                    'session.serialize_handler' => 'php',
                    'session.use_cookies' => 1,
                    'session.save_path' => TMP . 'sessions', // <- ここ
                    'session.save_handler' => 'files'
                ]
            ],
            // ...
    }
    // ...

要は、「"TMP"って定数が宣言されていないぞコラァー!」ってことだと思う。

過去こういうのでハマんなかったかな? ってことで思い出した。

www.aipacommander.com

そそ! これこれ。

$ ~/vendor/bin/phpunit --configuration ~/phpunit.xml.dist

./config/bootstra.php が見つからない

Warning Error: require_once(./config/bootstrap.php): failed to open stream: No such file or directory in ...

次はなにー?

<?php
    //...
    public function bootstrap()
    {
        require_once $this->configDir . '/bootstrap.php';
    }
    // ...

ここで発生している。

予備元を順に追っていきます。

<?php
    // ...
    public function run(ServerRequestInterface $request = null, ResponseInterface $response = null)
    {
        $this->app->bootstrap();
        // ...
<?php
    // ...
    public function execute($request)
    {
        try {
            $reflect = new ReflectionClass($this->_class);
            $app = $reflect->newInstanceArgs($this->_constructorArgs); // (´・ω・`)
        } catch (ReflectionException $e) {
            throw new LogicException(sprintf(
                'Cannot load "%s" for use in integration testing.',
                $this->_class
            ));
        }

        // Spy on the controller using the initialize hook instead
        // of the dispatcher hooks as those will be going away one day.
        EventManager::instance()->on(
            'Controller.initialize',
            [$this->_test, 'controllerSpy']
        );

        $server = new Server($app);
        $psrRequest = $this->_createRequest($request);
        $response = $server->run($psrRequest); // ここの中でbootstrap()を呼んでエラーが発生する

        return ResponseTransformer::toCake($response);
    }
    // ...

(´・ω・`)のところで、渡している値$this->_constructorArgsの中が、./configとなっているがダメ。

PhpStormのデバッグの設定では相対パスで設定すると何故かエラーになるので、絶対に変更しなければならない。

どうにかこいつの値を変更できないものか。と、調べていたら

<?php
    public function __construct($test, $class = null, $constructorArgs = null)
    {
        $this->_test = $test;
        $this->_class = $class ?: Configure::read('App.namespace') . '\Application';
        $this->_constructorArgs = $constructorArgs ?: ['./config']; // ここ
    }

__constructで、設定されていた。三項演算子なので、$constructorArgsの値がnullなのがダメ。

じゃあ、このクラスをオブジェクト化しているのはどこか。

<?php
    // ...
    protected function _makeDispatcher()
    {
        if ($this->_useHttpServer) {
            return new MiddlewareDispatcher($this, $this->_appClass, $this->_appArgs); // ここ
        }

        return new LegacyRequestDispatcher($this);
    }
    // ...

ふむう。じゃあ、この、$this->_appArgsってのはどこで設定されているのかなー。

<?php
    // ...
    public function configApplication($class, $constructorArgs)
    {
        $this->_appClass = $class;
        $this->_appArgs = $constructorArgs;
    }
    // ...

みつけたぁあああ!!

ってことは、このメソッドがあるクラスを継承しているテストクラスでそのまま呼べんじゃん!

ってことで、試す。

  • 自分のテストクラス
<?php
    // ...
    public function testIndex()
    {
        $path = '<絶対パス>';
        $this->configApplication(null, [$path]); // 配列で渡す
        $this->post('/schedule-api/get', $postData);
        // ...
    }

うまくいったぁああああああああ!!!!

うまくいったけど

って、ちょいまち。

そもそも、コマンドの引数でbootstrap.phpを指定できないのか? と、疑問に思った瞬間、記憶が戻ってきた。

www.aipacommander.com

$ ~/vendor/bin/phpunit --bootstrap ~/tests/bootstrap.php ~/tests/

(°ω°; マサカ...!?

・・・できませんでした。( ´ー`)フゥー...

いや、よくないけどね。

なんででしょー?

うーん。そもそも、設定するのが、configApplication()のメソッドなら、こいつをコールしている箇所を探せばいいはず。

$ grep 'configApplication' -r ~/vendor/
~/vendor/cakephp/cakephp/src/TestSuite/IntegrationTestCase.php:    public function configApplication($class, $constructorArgs)

Oh...

どこも呼んでないやん。

よくわからんが、とりあえずconfigApplication()setup()で呼んで設定することにしました。

<?php
    // ...
    public function setUp()
    {
        $this->configApplication(null, [ROOT . 'config']);
        parent::setUp();
    }
    // ...

WordPressでスケジュール表毎に記事を表示するページ作ったときの流れメモ

2時間で終わると思っていたけど、思った以上に時間かかった。

レベル低くてはずいけど、振り返り。

1. 仕様メモ

  • 数ヶ月毎のスケジュールをタブ化して、それぞれの日に紐づく投稿記事をリスト化してほしい
    • 土曜日と日曜日はclassを付与してcssで色を変更したい
  • 記事にはtaxnomyを紐付けて、taxonomyで絞り込みができるようにしたい

2. 仕様をプログラムに落とし込み

前はボトムアップで考えていました。考えてもよくわからないので、手を先に動かしてハマったら覚えようの姿勢。

が、この方法はぐぐることが前提のため、知識は増えますが、ものすごく時間がかかります。

1日(8時間)かけて実装したけど、結果が全然違うので、夜間やり直し。みたいな。

なので、最近というか去年ぐらいから、要件定義とは別に、やりたいことのtodoをソースコードに書きなぐってから、実装しています。

今回こんな感じ。

  1. アクセスした日付から当月を取得する
  2. 当月から、来月、再来月...と数ヶ月のDatetimeオブジェクトを作成
  3. 揃ったらArray化
    1. それぞれの月で、日スケジュールArrayを作成(ex: 1日 ~ 30日)
    2. 指定月の最初の日、最後の日を取得する
    3. 無限ループの中で、最初の日を1日ずつインクリメントする
    4. Datetimeオブジェクトを作成するArrayにpushしていく
    5. インクリメントした日が最後の日を超えたらbreakする
    6. 指定月の日スケジュールArrayの準備完了
  4. 数ヶ月毎でループ
    1. 数ヶ月毎の中には、日スケジュールArrayがあるのでそれでループ
      1. それぞれ日にマッチする記事を検索して出力する

こんな感じに書きなぐった。

さぁ実装です!

次、結果

結果

実装に5時間かかりました(°ω°;

次、振り返り。

振り返り

主に遅くなった原因を上げていきます。

Datetimeクラスの使い方が曖昧だった

まぁーググりまくった。

色々ありますが、modifyの使い方やformatをググった。あんまり覚えていなかったのね。反省。

フォーマットの符号をよく覚えていない問題

例えば

YYYY/MM/DD HH:mm:ss

よく見るこのフォーマットにするには

<?php
echo (new Datetime())->format('Y/m/d H:i:s');

このH:i:siが中々覚えきれないね。iって何の頭文字よ。さらに、よくやりがちなのはYYYY/MM/DDとほしい形通りのフォーマットに置換してくれると勝手に解釈してしまい、その文字列を渡すってのもよくやりました。moment.jsはそう使えるんだよ!!orz

また、曜日はwを使えますが、0 ~ 6 の数値が返ってきます。

英語ならStringを返すformatもありますが、日本人の場合は、日本語のArrayを用意してあげないといけません。これは次回から用意しておきます。

<?php
$jaWeekArray = ['日', '月', '火', '水', '木', '金', '土'];
echo $jaWeekArray[(new Datetime())->format('w')];

modifyに渡す文字列をよく覚えていない問題

<?php
echo (new Datetime())->modify('+1 days')->format('Y/m/d');

こうすると、実行時の日から+1された日付が表示されます。便利。

便利ですが、色々と使い方があります。これは覚えておいた方がもっとコーディングが早くなると思いました。

<?php
$nextDay = (new Datetime())->modify('+1 days'); // 次の日
$firstDay =  (new Datetime())->modify('first day of this month'); // 今月の最初の日
$lastDay =  (new Datetime())->modify('last day of this month');  // 今月の最後の日
$nextMonth = (new Datetime())->modify('+1 month'); // 来月
$afterMonth = (new Datetim())->modify('+2 month'); // 再来月

'+'と数字を使ったStringはまだわかりやすいですが、文にされると単純に暗記しないと覚えられないですね。。。

WordPressの検索の仕方が曖昧でした

4ヶ月前はガッツリWordPressを触っていたので、やりたいことはだいたいすぐ浮かぶようになりました。

が、「どのメソッドだっけ?」「ここのパラメータってなんだっけ?」ってのが多く、ググってしまいました。

これも今回やったことはちゃんと覚えなければ。。。

検索パラメータの構造

<?php
$parameter = array(
    'post_type' => 'post',
    'posts_per_page' => 4,
    'meta_query' => array(
        array(
            'key' => 'target_date',
            'value' => (new Datetime())->format('Y/m/d'),
            'compare' => '>=', // これはvalue以上の日付を検索する用に指定
            'type' => 'DATE'
        )
    ),
    'orderby' => array('target_date', 'event_start_time'), // orderは複数指定できる、また、mata_queryのkeyも指定可能
    'order' => 'acs'
);
return get_posts($parameter);

orderbyのところが曖昧でした。また、今回初めてしりましたがmetaの情報でもソートができることは覚えておきます。

テンプレートパーツに変数を渡す時

set_query_varを使いましょう。

<?php
set_query_var('tagName', 'タグの名前');
get_template_part('template-parts/part', 'test_tag_name'); // ~/template-parts/part-test_tag_name.phpってphpファイルを読み込む

todoの見直しをした

これが一番の原因じゃないかな。

わかった人は多いと思いますが、上に書いたtodoの中で、

  1. 数ヶ月毎でループ
    1. 数ヶ月毎の中には、日スケジュールArrayがあるのでそれでループ
      1. それぞれ日にマッチする記事を検索して出力する

この部分の、「1. それぞれ日にマッチする記事を検索して出力する」この箇所。これヤバイです。

というのも、数ヶ月毎ループ => 日スケジュール毎ループ => 記事検索(sql発行 -> 問い合わせ)というフローになっているので、DBへの軽いdos攻撃になるんじゃないかなと思ったわけですよ。

ということで、これはまずいと最後の最後で考えを変えないといけなくて、ちと混乱しました。

こういうときはコンビニやトイレ休憩がおすすめです。目の前にいるとこんがらがっているので、一旦別のことすると、少し気持ちが楽になります。んで、歩いているとさっき出てこなかった考えがひらめいたりするのでおすすめです。

さて、じゃあどうしようかなと思ったら、そもそも、数ヶ月毎のループの前で検索する月は決まっています。ので、betweenなどを使って、先に数ヶ月毎の記事を取得しましょう。

ただ、取得したデータは array(indexNumber => post)となっていて、postにアクセスしないと、日付の情報などがとれないです。そのため、日スケジュールのループ時に、2016/01/01というデータが渡された時、その値が記事リストの中に入っているのか確認するため、ループする必要があります。

日スケジュールのループの中で、マッチする日を探すためにループする。月の日数 x 記事数のループをしなければいけません。これはよくない。

「うーん」と悩んでいる中、コンビニ行ってきましたが、単純な話なことに気づきました。

記事リストの配列の構造を変えてしまえばいいのです。

keyを日付、valueを記事情報にしてあげれば、issetで、日付がマッチしていれば、それは表示したい記事だ。ということがわかります。

長くなりました。とまあこんな感じで、todoまで戻って、やり直して、構造を変えて、スマートな感じの処理になり、サービスを実装することができました。

振り返り終わり。

次回どうする?

使いそうな形にして、githubとかでコードを追加しておく

次回はコピペで終了するようにします。

「コピペは禁止」って人も多いと思いますが、数行のコード、またそのコードを理解しているのなら、自分おkだと思っています。

https://github.com/Aipakazuma/php-technical-collection/blob/master/jaWeekArray.php

実装前の // todo:の書きなぐりは引き続き続ける

これは頭がスッキリするので、続けてもいいかなと思う。

また、仕様書とエディタをいったりきたりせずに、エディタ上でソース書きながら確認できるので、いいかなと。

感想

自分で振り返るのってやっていたと思ったけど、今回はじめてかも。

【読書メモ】ITエンジニアが覚えておきたい英語動詞30

この本読みました。

ITエンジニアが覚えておきたい英語動詞30

ITエンジニアが覚えておきたい英語動詞30

うむ。英語苦手、というか英語をよくわかっていない自分でも読みやすい本じゃないかなと思います。

洋書読んでいるとき思うのですが、英語を頭の中で読みながら頑張ってそれの訳を探すのね。In many case, ... えとえと「多くのcase・・・多くの場合」か。みたいな。それをたった2行程の文だとしても結構大変なのです。

母国語のように、母国で意味がわかれば一番手っ取り早いのでは? と、いつも考えています。

この本はそういう英語学習のための基礎?みたいなことを教えてくれました。ITの技術を教えてもらったときにイメージ大事よイメージ! と、言われて学んできましたが、英語もイメージなのね。イメージ。

つーことで、忘れないうちにメモする。

日本人が英語が苦手な理由

本の最初で、外国で仕事するなかで日本人は会話の中で主語の後で詰まる傾向にあると書いています。

  • 日本人は主語の後で詰まる
  • 中国人は動詞の後で詰まる

S(主語) + V(動詞)がでると、「SでVしたい」ことはすぐわかるから、その後で詰まってもなんとなく意図が伝わるらしいです。

が、S(主語)で詰まると、何がしたいのかよくわからないため、会話がスムーズじゃないと述べています。

逆に、S+Vがすぐに話せるなら、会話はスムーズさを感じられるらしいです。その基礎をこの本で理解して鍛える準備をしましょう。ってことですね。

そのためには

  • 英語 => 日本語、日本語 => 英語と、翻訳を繰り返すのでなく、英単語をイメージとして理解すること
  • 動詞は4000語あるが、会話の6割はよく使う30語(基本動詞10 + 実践的に使いこなしたい20)を覚えればおk

なるほど。頑張ります。

基本動詞 10のイメージ

part1では、スピード会話力を身につけるための10の動詞が説明されています。

  1. イメージを理解する
  2. 頻出する使い方を理解する
  3. 練習

このstepで進めてくれるので、1回で覚えるのは難しいですが、なんどか試していくとこの本ででてくる使い方は覚えていけそうです。

詳細は今後読み返して理解してもらうとして、イメージだけ軽くメモしておきます。

Do

具体的な動詞が思いつかないなら、代わりにdoを使って話せばおk.動作を表す名詞にdoをつけるだけ。

  • do the work
  • do the exchange
  • do the copy

いまいち構文は覚えていませんが、とりあえず困ったらdoを使えばだいたいおkらしいです。I do programing.でもいいのかな?

Have

「持つ」って意味がすぐ浮かびそうです。が、主語が「モノ」だとしてもhaveを使うことができます。

f:id:aipacommander:20170102112601p:plain

※PPAPではありません。

例えば、「このプロジェクトには3つの段階がある」を英語にするとなると、

「このプロジェクト」が「3つの段階」を持っているに分解すれば、haveを使って表現することができます。

The project has three ...

って感じ。

  • This machine has no memory.
  • That team has a lot of talents.

擬人化するのが大事とのこと。

Get

getは3つのpartがあります。色んな意味で使えるらしいです。

「手にする」イメージ

f:id:aipacommander:20170102112104p:plain

「詳細をgetする」という使い方をイメージできます。

  • get access
  • get permission
  • get data

2つ目は、「こいつを何とかする」イメージ

f:id:aipacommander:20170102113127p:plain

なんとかするぜぇー。なんとかしてやるぜぇー。

このイメージで大事なのは、「自分がする」ではなく「誰にやってもらう」意味合いが強く、どんな立ち位置にいても使える表現とのこと。

  • get this product shipped
  • get this product improved
  • get this product ordered

最後は、「〜になる」イメージ

f:id:aipacommander:20170102113533p:plain

「大きくなる」は「get + 形容詞」。「壊れた状態になる」は「get + 過去分詞」という使い方ができる。

becomeでもいいらしいですが、getのほうが日常会話で多用されているから是非覚えたいところ。

  • get started
  • get completed
  • get confused

Give

「考えを伝える」はgiveを使う

f:id:aipacommander:20170102113750p:plain

「あげる」で覚えましたが、「考えを伝える」「発表する」「紹介する」は全部giveが使えます。それぞれ具体的にする動詞を探さなくてもgiveを使えばいいってことですね。

  • give a talk
  • give an introduction to ...
  • give a warning(警告する)

Make

「こいつを〜にする」イメージ

f:id:aipacommander:20170102114053p:plain

頻繁に使われるのは

  • make sure(〜を確かめる)
  • make sense(もっともだ、意味を成す)
  • make use of(使う、活用する)

の3つですが、「こいつを〜にする」の使い方が4番目らしいです。

  • make it clear
  • make it available
  • make it small

Take

「自ら手にする」イメージ

f:id:aipacommander:20170102114452p:plain

「取る」ではなくて、はっきりした意図を持って「取る」という意味で使います。積極的なのね。

  • I'll take it
  • take an action
  • take a break

でも「取る」という意味でも使われるとのこと(どっちよ)

f:id:aipacommander:20170102114816p:plain

  • take an example
  • take questions
  • take a seat

日本語にすると動作がバラバラですが、すべてtakeでおkです。

Put

「そいつがある状態にする」をイメージ

f:id:aipacommander:20170102115103p:plain

日本語「置く」って意味は忘れたほうが良い。(こんがらがるので)

え? お前の図は置こうとしている? 確かに。

が、「何か」に「とある状態」にする。って言いかえれば、「机」に「モノを置いた」は同じ意味あいになりますし、また、「名前」を「この欄に書く」でもputが使えます。(欄に名前が書いた状態にする)

  • put your name in this box

putすごい。

  • put the cursor here
  • put a video card in the machine
  • put music in my computer

ちなみに、よく使われるのは「put together」という表現らしく、「まとめる」という意味あいでよく使われるとのこと。

Go

「物事・状況が進む」はgo

f:id:aipacommander:20170102115555p:plain

「何か物事が方向性を持って進む」というのはgoが使えます。

  • go to
  • go ahead
  • go through

「行く」とかで覚えていましたが、色々な表現できるんですね。しゅごい。

  • go back(戻る)
  • sure. go ahead.(どうぞどうぞどうぞ)
  • go through the slide(スライドを検討する) => 1つずつチェックする。検討するという表現ができる

Come

Goは「行く」。Comeは「来る」

f:id:aipacommander:20170102120138p:plain

「私が・・・来た!」って感じかな。「現れる」というイメージを持ってください。

逆にgoはどっか行っちゃう意味合いで捉えられてしまうっぽいです。

なので、遅れて言い訳したあとに「すぐそっちへ向かいます」ならcomeを使えってことですね。

  • come up with(考えが現れた => 思いついた)
  • where did this data come from?
  • the feature will come in the next release.

Look

Lookの話かな? と、思いきやSeeとWatchもでますね。全体的に英語の「見る」イメージを説明しています。

f:id:aipacommander:20170102120537p:plain

何がいいたいのかというと

  • lookは見ている
  • seeは目に入っている

ということ、要は「意図的」なのかそうじゃないのか。よく使う説明ですね。

しかし、本では、どちらも「意図的」と説明しています。

例えば、「信号が見える」であればsee、「信号を見ている」であればlookが使えますが、意識的にはどっちも「見ている」ことの意識はあるわけですよ。

「じゃあ、どないせーちゅねん」となるわけですが、seeするためにlook atする。ということで理解してくださいと書いてあります。どういうこっちゃ。

要するに、seeは”見える状態”で使えば良い。lookは”見える。見る行為”で使ってください。具体的にはseeは"状態"なので命令することができない。命令文で使うことが出来ません。

  • I saw him at the station.
  • I saw your email.(君のメールが届いているのを見たよ)
  • I looked at your email. (内容までしっかり見たよ)

ただ、どっちでもおkな場合もあるので、使い分けは慣れないと厳しいとのこと。結構曖昧なのね。

ちなみに、watchなんですが、「動く画面を見る」っていうイメージなので、こっちは具体的なためあんまり困らないかも。

実践的に使いこなしたい20の動詞

こっからはダイジェスト

  • is that + string ・・・〜は〜だということ
  • need・・・必要だ
  • work・・・作業する -> やる
  • find・・・分かる
  • run・・・〜について意見をもらう
  • follow up・・・引き続き議論する
  • update・・・最新の情報を教える
  • help・・・助かるよ
  • happen・・・たまたまそうなる
  • seem・・・〜みたいだ
  • discuss・・・〜について話をする
  • learn・・・新しいことを知る
  • call out・・・しっかり言っておく
  • block・・・作業ができない
  • capture・・・捕まえる -> 洗い出す
  • execute・・・実行する -> やる
  • conduct・・・実行する -> やる
  • store・・・保存する
  • talk・・・相談する
  • align・・・すり合わせる

storeって、保存するって意味合いだったのね。。。はじめて知った。

まとめ

この本を購入した一番の理由はは、ITエンジニアの方が書いたという点でした。内容には実際に現場で利用した文章が例として載っています。なので、しっかり使いこなせるようになれば、すぐにでもstackoverflowとかで使えるようになるんじゃないか?と思ったので購入しました。

エンジニアの人だったらモチベーションを保ちながら読めるんじゃないかなと思います。

また、最後の章に外国のエンジニアとmeetingするシュミレーションがあります。こっちは流し見でしかみていませんが、上のイメージを理解してやるとたのしいですよ。

本の例や最後の章のシミュレーションは英語の音声などのオプションもあるので、あとでiphoneにいれて通勤中にでも聞き流してみたいなと思います。

早く使えるようになるといいな。

ってことでメモ終わり。

ITエンジニアが覚えておきたい英語動詞30

ITエンジニアが覚えておきたい英語動詞30