2021 08 05 Diary
...
...
目的 すごく今更&簡潔にだけど、python3.6以降で利用できる文字列フォーマットについてまとめていきます。 (ずっとstr.format()を使っていたので戒めも兼ねて)。 フォーマット済み文字列リテラルとは フォーマット済み文字列リテラル(f-string)では、文字列の先頭にfを付けることで、pythonの式を文字列内に{式}の形で埋め込むことができます。 従来の書き方よりも簡潔、かつわかりやすく記述することができる書き方です。 公式ドキュメント 使い方 変数に入った数字を3文字のカンマ区切りにする hoge = 99999999 # 従来のstr.format() print("{:,}".format(hoge)) # フォーマット済み文字列リテラル print(f"{hoge:,d}") :の後ろに整数をつけて縦を揃える tokuten = {"kokugo": 9, "sugaku": 81, "eigo": 100} for sub, point in tokuten.items(): print(f'{sub:10} ==> {point:5d}') # kokugo ==> 9 # sugaku ==> 81 # eigo ==> 100 まとめ 従来のstr.format()と比べると、f-stringは最終結果が人の目で見てもわかりやすいですね。
lodashとは The Lodash library exported as a UMD module. (中略) …Lodash makes JavaScript easier by taking the hassle out of working with arrays, numbers, objects, strings, etc. 配列、数値、オブジェクト、文字列など、値を扱う際に便利な関数を多く提供しているJavaspriptのライブラリです。 _.getや_.eachなどがそれ。 公式ドキュメントがすごくわかりやすくていい感じです。 lodash - github 公式ドキュメント 使い方 インポート import _ from 'lodash'; 関数 _.get() _.get(object, path, [defaultValue]) objectのpathの値を取得する。値を解決できなかった場合、defaultValueを返す。 _.has() _.has(object, path) objectのpathの値が存在するかを調べる。値自体は返さない。 _.set() _.set(object, path, value) objectのpathにvalueの値をセットする。 pathが定義されていない場合は新しく作られる。 インデックスのプロパティがない場合は配列が作成され、それ以外のプロパティがない場合はオブジェクトが作成される。(?) _.each() -> forEach() _.forEach(collection, [iteratee=_.identity]) collectionの要素を反復し、各要素に対してiterateeを実行。 iterateeは3つの引数(value, index|key, collection)で呼び出される。 ※iteratee関数は明示的にfalseを返すことで反復を終わらせることができる _.flatten() _.flatten(array) arrayを一段分フラットにする。非破壊的メソッド。...
...
目的 社内お勉強会で DDD 本を輪読することになったんですが、 改めて「〇〇ってわかりますか?」と言われると戸惑ってしまうことが多いので自分用にまとめました。 抽象クラス(abstract class) 他のクラスで継承してもらうことを前提としたクラス。 複数のクラスの共通処理の中に、一部異なる処理を使用したい場合などに定義する。 抽象クラス自体はインスタンス化できない abstract functionで抽象メソッドを定義できる インターフェース クラスが実装するメソッドを定義することができるもの。 メソッドの実体は持てない(定義のみ) 使用できる修飾子はpublicのみ 定数を持てる。実装先のクラスでのオーバーライドはできない 不特定のクラスで、共通のメソッドを定義したい場合などに定義する。 ポリモーフィズム 「中に入るものによって、同じ関数でも違う処理を行える」というオブジェクト指向プログラミングの特徴のこと。 「モノが「そのモノ」らしく振る舞うこと」 =「呼び出した関数が、呼び出し元のオブジェクトに適した振る舞いをすること」 # 動物は必ず「鳴く」 interface Animal { sound(); } # 犬は「動物らしい振る舞い」をする(鳴く) class dog implements Animal { sound() { /**/ } } # 動物は「鳴く」ので、引数の動物ごとの異なる鳴き声を処理する # 引数で与えられる動物によって、異なる処理(鳴き声)ができる public function animalsound(animal) { animal.sound() } 継承 親クラスの振る舞いを引き継いで、子クラスを実装すること。 子クラス側で親クラスを拡張することができる。 委譲 実際の振る舞いを別のオブジェクトに委ねることで、別のオブジェクトの振る舞いを再利用する手法。(?) カプセル化 関連のあるデータとその使い方を一まとめにしたもの。 内部のデータを直接いじることはさせずに、使い方だけを見せる。 GoF デザインパターン 23 種類あるヤツ(雑) 勉強します 3 分でわかるデザインパターン入門 SOLID 原則 SOLID 原則とは Robert C....
...
...
目的 ここ最近、しばらくlaravel-adminという管理画面を作成するためのライブラリを使っていたので、調べたことやつまづいたところも含めて少しずつ書き起こそうと思います。 まずはインストール編です。簡単に管理画面を確認できるところまで見ていきましょう。 laravel-adminとは laravelで簡単にDBの管理画面を作成することができるライブラリです。 ドキュメントやデモサイトなど使用するために必要な資料が充実しており、難しいカスタムを行う必要がなければものすごく簡単に管理画面が構築できます。 Laravel-admin(ドキュメント) GitHubページ 基本的な使用方法は上記でカバーし、カスタマイズして使用したい際には直接ソースコードを読んで適宜書き換えていく形になります。 主観ですが、コード内のコメントも(おそらく書き換える前提の部分は)丁寧に書かれているので、しっかり読み解けば問題ないかと思います。 プロジェクトの作成 既に開発しているlaravelプロジェクトに追加する場合は、この章は飛ばしてもらって大丈夫です。 何もないところからlaravel-adminを試したい方は、まずlaravelプロジェクトを作成するところから始めましょう。 公式によると、現在のバージョンでは以下の環境が推奨されるようです。 PHP 7+ laravel 5.5+ This package requires PHP 7+ and Laravel 5.5, for old versions please refer to 1.4 laravel-admin install $composer create-project --prefer-dist "laravel/laravel=5.5.*" <project-name> DBも必要になってくるので、.envにDBの情報も書き足しておきましょう。 よければこちらの記事も参考にしてみてください。 【Laravel+MySQL+nginx】docker-composeで最小構成の環境構築 - SawaLog インストール laravelの準備ができたら早速laravel-adminをインストールします。 $composer require encore/laravel-admin インストールが終わったら下記コマンドを実行します。 $php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider" $php artisan admin:install これらを実行すると、app/Adminディレクトリが作られます。これからの実装はこのディレクトリ配下で行うことになります。 ファイルの初期配置は以下。 app/Admin ├── Controllers │ ├── ExampleController.php │ └── HomeController.php ├── bootstrap....
起こった問題 タイトルの通り、Laravelで使用するDBのhostをRead/Weiteで切り替えたい、と思って設定をしていました。 設定後下記を確認して、 >>> config('database.connections.pgsql') => [ "read" => [ "host" => [ "postgres2", ], ], "write" => [ "host" => "postgres", ], ... 反映されてるな、と思って念の為connectionも見てみました。 >>> DB::connection('pgsql::read')->getConfig(); => [ ..., "host" => "postgres", ] ……あれ? Readコネクションなのでpostgres2であって欲しいのに、postgresが出てきてしまいました。 反映されてないのかな?と思い色々調べたので、備忘録として置いて起きます。 調べたこと getConfigで参照されるconfigは、 Illuminate\Database\Connectors\ConnectionFactory::make内で、 /** * Establish a PDO connection based on the configuration. * * @param array $config * @param string|null $name * @return \Illuminate\Database\Connection */ public function make(array $config, $name = null) { $config = $this->parseConfig($config, $name); if (isset($config['read'])) { return $this->createReadWriteConnection($config); } return $this->createSingleConnection($config); } createReadWriteConnectionが呼び出され、...
...