tap,yeild_selfについて
2020/07/11 09:43
<p>tapとyield_selfの使い分けについて</p> <ul> <li>tapについて</li> </ul> <p>tapはレシーバ自身を返すため、元々のレシーバの値を変更することなくメソッドチェーンをつなげることができる。 他の処理を行いながら、メソッドチェーンを行いたい時などに便利。</p> <pre class="code" data-lang="" data-unlink>result = [] test = [1, 2, 3] kekka = test.tap { |t| result << t.sum }.join('/') result => [6] kekka => "1/2/3"</pre> <ul> <li>yield_selfについて</li> </ul> <p>yield_selfはブロック内の処理結果を返すため、</p> <p>他の処理を行いながら、メソッドチェーンを行いたい時などに便利。</p>
SQL一時調べ
2020/07/11 09:42
<p>目次</p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>とは</li> <li>用語</li> <li>基本的な構文</li> <li>Select構文</li> <li>句・式・文について</li> <li>内部結合・外部結合</li> <li>集計関数</li> <li>case式</li> <li>サブクエリ</li> <li>Active Record</li> <li>Active Recordとは</li> <li>Active Recordの設計</li> <li>Active Recordから<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>を直接発行</li> </ul> <hr /> <h2><a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>とは</h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%D8%B7%B8%A5%C7%A1%BC%A5%BF%A5%D9%A1%BC%A5%B9%B4%C9%CD%FD%A5%B7%A5%B9%A5%C6%A5%E0">関係データベース管理システム</a> (<a class="keyword" href="http://d.hatena.ne.jp/keyword/RDBMS">RDBMS</a>) において、データの操作や定義を行うためのデータベース言語(問い合わせ言語)、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%E1%A5%A4%A5%F3">ドメイン</a>固有言語である。プログラミングにおいてデータベースへのアクセスのために、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%B8%C0%B8%EC">プログラミング言語</a>と併用されるが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>そのものは<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%B8%C0%B8%EC">プログラミング言語</a>ではない。</p> <p>(引用:<a class="keyword" href="http://d.hatena.ne.jp/keyword/wikipedia">wikipedia</a> <a href="https://ja.wikipedia.org/wiki/SQL">https://ja.wikipedia.org/wiki/SQL</a>)</p> <hr /> <h2>基本的な用語</h2> <ul> <li><p>クエリ(問合せ) データベースへ要求を出すこと</p></li> <li><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/DML">DML</a>(データ操作言語) ★今日のメイン データベースにに対する操作を行う言語。SELECT(検索)、INSERT(挿入)、UPDATE(更新)、DELETE(削除)など</p></li> <li><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/DDL">DDL</a>(データ定義言語) データ構造を定義する言語。代表的な言語はCREATE(表領域作成)、<a class="keyword" href="http://d.hatena.ne.jp/keyword/DROP">DROP</a>(表領域の削除)、ALTER(変更),TRUNCATE(表領域内のレコード削除)など</p></li> <li><p>DCL(データ制御言語) <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%E9%A5%F3%A5%B6%A5%AF%A5%B7%A5%E7%A5%F3">トランザクション</a>の制御を行うための言語。BEGIN、COMMIT、ROLLBACKなど</p></li> </ul> <hr /> <h2><a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>の構文について</h2> <p>↓<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>構文逆引き辞典 <a href="http://www.sql-reference.com/">http://www.sql-reference.com/</a></p> <hr /> <h4>Select構文</h4> <p>テーブルからレコードを取得するための命令文。</p> <pre class="code" data-lang="" data-unlink>SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] [HIGH_PRIORITY] [DISTINCT| DISTINCTROW | ALL] フィールド名 / 式 [ AS 別名 ], ... [INTO {OUTFILE | DUMPFILE} 'ファイル名' オプション] [FROM テーブル名 [WHERE 条件式] [GROUP BY {整数 | フィールド名| 式} [ASC | DESC], ... [WITH ROLLUP]] [HAVING 条件式] [ORDER BY {整数 | フィールド名| 式} [ASC | DESC] ,...] [LIMIT [オフセット,] 行指定] [PROCEDURE 手続き名(属性一覧)] [FOR UPDATE | LOCK IN SHARE MODE] ]</pre> <p>(引用:<a href="https://rfs.jp/sb/sql/s03/03-15.html">https://rfs.jp/sb/sql/s03/03-15.html</a>)</p> <hr /> <h4>Select句の例</h4> <pre class="code" data-lang="" data-unlink>/* budgetsテーブルの全レコードの取得・表示 */ select * from budgets; /* 重複の排除(distinct) */ SELECT DISTINCT id, management_item_id, value from budgets /* 実績の金額順でソート */ SELECT id, management_item_id, value AS "金額" from budgets WHERE value > 30000 ORDER BY value;</pre> <hr /> <h2>句・式・文の区別について</h2> <p><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243803/2cd3b4f9-5b6b-4087-0e92-9be7f9e77529.png" alt="image.png" /></p> <h4>句(clause)</h4> <p>節とも呼ぶ。文、またはクエリの構成要素。 省略可な句もある。</p> <p>(例) UPDATE句、FROM句、WHERE句、EXISTS句</p> <h4>式(experssion)</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AB%A5%E9%A1%BC">スカラー</a>値などを表す '1', 'katsui', trueなど</p> <h4>文(statement)</h4> <p>命令文ともいう。 一つの実行の単位となる<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>。 文の末尾には';'を付けることができる。 (例) SELECT文 UPDATE文</p> <p>参考: <a href="https://qiita.com/gooddoog/items/a12d500b331f2ecf718f">https://qiita.com/gooddoog/items/a12d500b331f2ecf718f</a> <a href="https://en.wikipedia.org/wiki/SQL">https://en.wikipedia.org/wiki/SQL</a></p> <hr /> <h2>内部結合・外部結合</h2> <p>内部結合(INNER JOIN): 複数のテーブルを結合し、条件が一致したもののみを取得する。 結合条件に合わないものは弾かれる。</p> <p>左外部結合(LEFT OUTER JOIN) 右外部結合(RIGHT OUTER JOIN) 完全外部結合(FULL OUTER JOIN): それぞれ、まず内部結合が行われる。その後、対象とするテーブルに対して結合できるデータをくっつける。完全外部結合は「内部結合 + 左外部結合 + 右外部結合」を行う。</p> <pre class="code" data-lang="" data-unlink>/* 内部結合 */ SELECT * from base_achievements INNER JOIN management_items on base_achievements.management_item_id = management_items.id; /* 左外部結合(実績に対して、結合条件に合う予算細目を結合し、なければNULLを入れておく) */ SELECT * from base_achievements LEFT OUTER JOIN management_items on base_achievements.management_item_id = management_items.id; /* 右外部結合(予算細目に対して、結合条件に合う実績を結合し、なければNULLを入れておく) */ SELECT * from base_achievements RIGHT OUTER JOIN management_items on base_achievements.management_item_id = management_items.id;</pre> <hr /> <h2>集計関数について</h2> <p>GroupBy: GROUP BY句に記述された列のリスト(集約キー)を基準に、同じ値を持つ行を同じグループに振り分ける Having: グルーピングした結果から、Having句で指定した抽出条件を実行する</p> <pre class="code" data-lang="" data-unlink>/* 実績のmanagement_idに対して単純にグループ化 */ SELECT management_item_id from base_achievements GROUP BY management_item_id ORDER BY management_item_id; /* 実績を紐づく細目ごとにグループ化→実績値の合計を出力 */ SELECT management_item_id, sum(value) from base_achievements GROUP BY management_item_id ORDER BY management_item_id; /* 実績を紐づく細目ごとにグループ化→実績値の合計を出力→合計金額6000000以下は弾く */ SELECT management_item_id, sum(value) AS "合計金額" from base_achievements GROUP BY management_item_id HAVING sum(value) > 6000000 ORDER BY management_item_id;</pre> <hr /> <h4>集計関数を実行する上でのメモ</h4> <ul> <li><p>whereとHavingとの違いについて Where句はselect句の結果からwhere句で指定した抽出条件を実行する Having句はGroupBy句でグルーピングした結果からHaving句で指定した抽出条件を実行する</p></li> <li><p>GroupByでは、GroupByで指定したカラムしかSelect句に指定できない</p></li> </ul> <hr /> <h2>case式</h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>内で条件分岐を行うための構文。 値と式による分岐があるが、値の方はあまり使わないのではないか。</p> <pre class="code" data-lang="" data-unlink>/* (条件式による分岐)実績のvalueに応じて、判定結果をそれぞれ「継続」「保留」「棄却」とする) 空文字の時には"/"を外す */ SELECT id, summary, value AS "金額", CASE WHEN value < 500000 THEN CASE summary WHEN '' THEN '棄却' ELSE summary || '/棄却' END WHEN value > 1000000 THEN CASE summary WHEN '' THEN '継続' ELSE summary || '/継続' END ELSE CASE summary WHEN '' THEN '保留' ELSE summary || '/保留' END END "判定結果" FROM base_achievements ORDER BY value DESC</pre> <hr /> <h2>副問合せ(サブクエリ)</h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>文の中に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%FE%A4%EC%BB%D2">入れ子</a>で<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>文を指定すること。Select文の結果を別の<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>文で利用する。 from句配下でも、where句配下でも、select句のすぐ後に使用することもできる。 from句配下で使用されるケースはイメージがつかない。</p> <p><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243803/62b944ec-f291-3d13-6f77-3dd74156255a.png" alt="image.png" /> (引用:<a href="https://www.atmarkit.co.jp/ait/articles/1208/06/news118.html">https://www.atmarkit.co.jp/ait/articles/1208/06/news118.html</a>)</p> <p> </p> <hr /> <h4>副問合せの例</h4> <pre class="code" data-lang="" data-unlink>/* サブクエリ:勘定科目に紐づく細目に紐づく実績のみを取得する */ SELECT id, summary, management_item_id, value AS "金額" from base_achievements WHERE management_item_id IN ( SELECT management_items.id from management_items INNER JOIN accounts on management_items.account_id = accounts.id WHERE accounts.type = 'FinancialAccount') ORDER BY base_achievements.id;</pre> <p>便利ではあるが、ネストしまくると途端に可読性が悪くなるやつでもあると思う。</p> <hr /> <h2>Active Recordとは</h2> <p>「Active Recordパターン」という<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%B6%A5%A4%A5%F3%A5%D1%A5%BF%A1%BC%A5%F3">デザインパターン</a>に由来した、<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>を意識せずにデータベースアクセスを行えるライブラリ。</p> <p>→ Active Recordパターンを<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a>で実装したライブラリが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Rails">Rails</a>で使われているActive Recordライブラリ</p> <p>(参考:<a href="https://www.techscore.com/tech/Ruby/Rails/other/designpattern/1/">https://www.techscore.com/tech/Ruby/Rails/other/designpattern/1/</a>)</p> <hr /> <h4>Active Recordの設計</h4> <p>Active Recordパターンについて → 「データベーステーブルまたはビューの行をラップし、データベースアクセスを<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A5%D7%A5%BB%A5%EB%B2%BD">カプセル化</a>してデータに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%E1%A5%A4%A5%F3">ドメイン</a>ロジックを追加するオブジェクト」</p> <p>これを<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a>で実装すると下記のようなクラス設計になる。</p> <ul> <li>クラスは1つのテーブルを表す</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9">インスタンス</a>はテーブルの1行を表す</li> <li>クラス、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9">インスタンス</a>メソッドで関連するデータ処理を行う</li> </ul> <hr /> <pre class="code" data-lang="" data-unlink># application_record.rb class ApplicationRecord < ActiveRecord::Base … end # ApplicationRecordを継承したbase_achievement.rb(ActiveRecord::Baseを継承したモデルクラス) class BaseAchievement < ApplicationRecord … end </pre> <hr /> <h4>Active Recordで<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>を直接発行したい時</h4> <p>「<a class="keyword" href="http://d.hatena.ne.jp/keyword/ActiveRecord">ActiveRecord</a>::Base.connection」を使用する</p> <pre class="code" data-lang="" data-unlink>con = ActiveRecord::Base.connection con.execute("SELECT DISTINCT id, management_item_id, value from budgets WHERE value > 30000;") // 返り値(DBアダプタ依存のオブジェクト) #<PG::Result:0x00005627b5dd0080 status=PGRES_TUPLES_OK ntuples=11 nfields=3 cmd_tuples=11></pre> <hr /> <h4>直接検索とかしたい時とか</h4> <ul> <li>select_all(検索結果)</li> </ul> <p>これ自体の返り値は<code>ActiveRecord::Result</code>オブジェクトで、to_hashとかでハッシュの配列が取得できる。</p> <pre class="code" data-lang="" data-unlink>con = ActiveRecord::Base.connection con.select_all("SELECT DISTINCT id, management_item_id, value from budgets WHERE value > 30000;").to_hash // 返り値 [{"id"=>1166, "management_item_id"=>471, "value"=>42433.0}, {"id"=>1165, "management_item_id"=>471, "value"=>34243.0}, {"id"=>1155, "management_item_id"=>474, "value"=>42342.0}, {"id"=>1173, "management_item_id"=>472, "value"=>909090.0}, {"id"=>1161, "management_item_id"=>476, "value"=>625656.0}, {"id"=>1171, "management_item_id"=>481, "value"=>34242.0}, {"id"=>1156, "management_item_id"=>474, "value"=>35252.0}, {"id"=>1174, "management_item_id"=>472, "value"=>454545.0}, {"id"=>1206, "management_item_id"=>492, "value"=>245345.0}, {"id"=>1159, "management_item_id"=>476, "value"=>55245.0}, {"id"=>1210, "management_item_id"=>480, "value"=>345345.0}]</pre> <p>select_oneとかselect_rowsなどいくつかメソッドがある。</p> <p>参考: <a href="https://qiita.com/yut_h1979/items/4cb3d9a3b3fc87ca0435">https://qiita.com/yut_h1979/items/4cb3d9a3b3fc87ca0435</a></p> <p> </p>
業務上の備忘録(主にRails,npmパッケージ)
2020/01/21 14:02
<ul> <li>worker</li> </ul><p>アプリケーション要求サイクルの外側で実行されるプロセスのことで、非同期通信でリク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>トを処理する。<br /> Webサーバーについて話している場合、「ワーカー」という単語はスレッドまたはプロセスと同じ意味で使用される。</p><p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.oiax.jp%2Frails%2Fzakkan%2Fresque_worker_as_daemon.html" title="Resqueワーカーをデーモンとして動かす - Rails 雑感 - Ruby on Rails with OIAX" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://www.oiax.jp/rails/zakkan/resque_worker_as_daemon.html">www.oiax.jp</a></cite><br /> </p> <ul> <li>プロセス・スレッドの違いについて</li> </ul><p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fmilestone-of-se.nesuke.com%2Fsv-basic%2Farchitecture%2Fcpu%2F" title="【図解】CPUのコアとスレッドとプロセスの違い・関係性、同時マルチスレッディング、コンテキストスイッチについて" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://milestone-of-se.nesuke.com/sv-basic/architecture/cpu/">milestone-of-se.nesuke.com</a></cite></p><p></p> <ul> <li>認証と認可の違いについて</li> </ul><p>punditを使っていて、改めて調べた。<br /> 下記サイト様が非常に分かりやすい。<br /> <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fdev.classmethod.jp%2Fsecurity%2Fauthentication-and-authorization%2F" title="よくわかる認証と認可 | Developers.IO" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://dev.classmethod.jp/security/authentication-and-authorization/">dev.classmethod.jp</a></cite></p><br /> <p></p> <ul> <li>core-jsについて</li> </ul><p>babelのモジュールが読み込むpolyfile集を提供しているライブラリ。</p><p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Faloerina01.github.io%2Fblog%2F2019-06-21-1" title="Babel7.4で非推奨になったbabel/polyfillの代替手段と設定方法" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://aloerina01.github.io/blog/2019-06-21-1">aloerina01.github.io</a></cite></p>
postgresでテナント(schema)を切り替える際の備忘録
2019/12/01 22:24
<h3>tableplusについて</h3> <p>使用したDBクライアントツールは「tableplus」 <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Ftableplus.com%2F" title="TablePlus | Modern, Native Tool for Database Management." class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://tableplus.com/">tableplus.com</a></cite></p> <p>無料版だと、タブが二つしか開けないのが最大のデメリットか。 <a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>入力で一つは常に使用している状態なので、実質一つのタブしか自由に使えない感じ。</p> <h4>tableplus設定時のメモ</h4> <p>DBの接続する際に<code>host</code>と<code>port</code>を入力する必要があるのだが、私はこの二つに関してあまりいい思い出がないので、設定時の確認方法をメモしておく。</p> <ul> <li>hostの確認について</li> </ul> <p>ターミナルで<code>ifconfig</code>と入力 → 色々表示されるので「en0」のところを見る → 「inet」のところに表示されているの<a class="keyword" href="http://d.hatena.ne.jp/keyword/IP%A5%A2%A5%C9%A5%EC%A5%B9">IPアドレス</a>を使用する。</p> <ul> <li>portの確認ついて</li> </ul> <p>自分は<a class="keyword" href="http://d.hatena.ne.jp/keyword/rails">rails</a>の人間なので、DBのportの設定とかは「database.yml」を見ればいい。他の確認方法について分かったら追記していくつもり。</p> <h3>schema表示</h3> <p>コマンドは下に全部載っていた。 tableplusでの簡単なschemaの切り替えについても画像付きで載っていたので見れば分かるかと。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Ftableplus.com%2Fblog%2F2018%2F04%2Fpostgresql-how-to-list-all-schemas.html" title="PostgreSQL - How to list all available schemas?" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://tableplus.com/blog/2018/04/postgresql-how-to-list-all-schemas.html">tableplus.com</a></cite></p> <ul> <li>利用可能なschemaの列挙</li> </ul> <p>下記の2つの<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>文で使用可能なschemaの一覧が表示できる。</p> <pre class="code" data-lang="" data-unlink>SELECT schema_name FROM information_schema.schemata SELECT nspname FROM pg_catalog.pg_namespace;</pre>
一年弱を振り返り
2019/10/17 00:30
<p>こんにちは。</p><p>最近もコードを書く毎日です。<br /> 今の会社に入社してから、そろそろ1年になる勢いです。あと2ヶ月ぐらいですかね。</p><p>一旦、この一年弱でやってきたことを整理してみたんですが、ざっと下記のようなことをしてきました。<br /> <br /> </p> <ul> <li>ちょっとしたフロント側のデザイン変更</li> </ul> <ul> <li>そこそこ大きな機能の実装・リリース</li> </ul> <ul> <li>料金計算部分の修正</li> </ul> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Salesforce">Salesforce</a>との連携部分の実装</li> </ul> <ul> <li>gem, npmパッケージの影響調査及びアップデート</li> </ul> <ul> <li>その他細々としたタスク</li> </ul><p><br /> んで、出来ること自体は増えたんですが、依然「実装力」自体が低いままになっています。<br /> 頭の中に画面の動きやデータの流れはイメージできるようになってきたんですが、それをいざ実装しようとすると<br /> 途端に詰まることが多いです。</p><p>これについては実装方法のスタックが自分の中に少ないことが最大の原因です。<br /> こればかりは、コードを書いていく中で引き出しを増やしていくしかないかなと。</p><p>しかし、やはり今の会社で働き始めてもうすぐ一年になるので、いい加減コ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%E1%A5%F3%A5%D0%A1%BC">アメンバー</a>として実装できるぐらいには<br /> 成長していたかったんですが、壁を超えられていない感じです。</p><p>メンバーの中でも、自分が消化できたタスク数が一際低くなっていることが常なので、ここに関しては本当に早めに改善したいと思っています。</p><br /> <p>改善されるのが早いか、切られるのが早いか、というのが現実味を帯びてきてしまっているので、是が非でも改善していきたい今日この頃。</p><p>一旦ここまでで、また技術系の投稿をしていきたいと思います。</p><p>それでは。</p>
webpackについて(備忘録)
2019/08/12 22:32
<p>htmlのheadにてlodashを<a class="keyword" href="http://d.hatena.ne.jp/keyword/cdn">cdn</a>経由で使用するためのリンクを貼っつける<br /> bodyでindex.js<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>を使用するための記述を追加する</p><p>index.js内では、htmlのbodyに追加するdivの中身を生成して追加する<br /> webpackを使うと、index.htmlで必要とされるデータ(画像、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>など)を、個々でサーバーに取得要求しなければならず、<br /> 時間がかかってしまうことを解決できる。</p><br /> <p>npm installした「lodash」をローカルで使うように修正。<br /> npm installした後、index.js内にimport文を書く。</p><p>src/index.jsを、webpacjkがバンドルして、その成果物「main.js」をdist/に出力する。<br /> なので、index.html側でmain.jsを使用できるように、body内で<br /> <code>main.js</code>を読み込んでいる。<br /> <br /> </p> <ul> <li>webpack.config.jsについて</li> </ul><p>config.jsをwebpackに使ってもらうには、exportしないといけない</p><br /> <br /> <p>npxコマンドについて<br /> ローカルにインストールしたnpmパッケージを、「npx」と入力することで実行可能。<br /> npxはnpmにバンドルされているため、個別のインストールは不要。</p><p>ひとまず、下記コマンドで対応した。</p> <pre class="code" data-lang="" data-unlink># 開発環境 npm run dev # 本番環境 npm run build</pre>
2019/08/03 16:23
<p>JSでのnull判定とかundifined判定とか色々あるが、lodashのライブラリに便利なものがあったのでメモ。</p> <ul> <li>nullかどうかを判定</li> </ul><pre class="code JS" data-lang="JS" data-unlink>_.isNull(value)</pre> <ul> <li>null, およびundifined判定に使える</li> </ul><pre class="code JS" data-lang="JS" data-unlink>_.isNil(value)</pre><p><br /> 上二つのメソッドは、要はそれぞれ<code>val == null</code>,<code>val === null</code>の判定をしているということですね。<br /> DB上の値をフロントに返す際に、<a class="keyword" href="http://d.hatena.ne.jp/keyword/nil">nil</a>であれば何も返さないという実装にしていることがあるが、そうするとReact側で対応している変数には<code>undifined</code>が入ってしまう。<br /> そこで、null、もしくはundifinedかを検出できる2個目のメソッドが便利という話でした。</p><br /> <br /> <p>参考にしたサイト<br /> <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Flodash.com%2Fdocs%2F4.17.15%23isNil" title="Lodash Documentation" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://lodash.com/docs/4.17.15#isNil">lodash.com</a></cite></p>