niki12260714の日記

フリーランスのITエンジニアの呟き。

ソフトウェアのテスト技法 6日目

テストの計画 スクリプトテスト、探索的テストは、それぞれテスト計画をする時期が違う。 早期に計画するか、テスト中に計画するかだが、どちらが良いという話ではなく、計画とは変化するものであり、それを忘れてはならない。 計画はあくまで予定であり、状…

ソフトウェアのテスト技法 5日目

データフローテスト 変数を定義する前に参照する、破棄するといったバグ検出に役立つ手法。 他の手法でもそうですが、「何に注目するテストか」という観点を思い出せました。 あとこれは、開発していると体得するけど、ちゃんと理論として知っておくとRSpec…

ソフトウェアのテスト技法 4日目

ユースケーステスト(昨日の続き) 例題を確認。 定義をした後に、実際にテストケースをどうやって抽出するかのお話。 トランザクションに注目するということで、例外処理のパスをどうやって通すかに言及され、ツールが紹介されていましたが、アクセスしたら…

ソフトウェアのテスト技法 3日目

状態遷移テスト 最近作ってなかったけど、今取り組んでいる業務で有用なことに気が付いた。 これもデシジョンテーブルと同じで、企画や営業の人と話すときに、分かりやすく説明できる。 対面だと紙に手書きで作ったけど、リモートだと手書きを見せるのは難し…

ソフトウェアのテスト技法 2日目

同値クラステスト、境界値クラステスト 条件の範囲のお話。 業務で毎日のように使っているので、改めてテストの定義を理解しなおし。 デシジョンテーブルテスト テスト設計者にはおなじみの奴ですが、業務で書くと意外に驚かれる。 あとこれをもって企画の人…

ソフトウェアのテスト技法 1日目

アウトプットして記憶定着を狙った記事なので、特に有益な内容があるかは不明。 自分にはある。 そして回答があっているかは分らぬ。 1章演習問題の解答 int bleach(int j){ j = j -1; // 正しくはj = j+1 j = j / 30000; return j; } 期待値とずれる値は300…

Railsでタグのオプションにif文使いたい場合

参考にさせていただきました。 qiita.com まんまこのままですが、三項演算子も勿論使えたので。 <%= f.text_field form: "#{条件式 ? '値1' : '値2' }" %> オプションが文字列になるものはいけそうです。

formを入れ子で使いたい場合の対応

オメェのシステム設計が悪いんだオラァ! と言われればそこまでなのですが、とある画面で、二つのformを内包するformを作りたいと思いました。コードを書くと、こんな感じ。 <form id="親"> <form id="子1"> <intput type="text" id="child_txt_1"> </form> <form id="子2"> <intput type="text" id="child_txt_2"> </form> <input type="button" value="送信"></form> それぞれ、子1,2で入力された値を親フォームのsubmit先で使いたい。で、…

Go言語チュートリアル始めました

Go言語をちゃんと勉強しようと、チュートリアル始めてみました。 A Tour of Go ポインタの前まで完了。※読むだけなら全部読んだけど、理解できたのはポインタの前まで…… ざっと感想。・型がきっちり決まっている→引数、戻り値も「なんの型か」を最初に宣言す…

Bootstrap4で、スマホサイズの時に、Tableの特定カラムを非表示にする

Bootstrap4から、「このサイズの時は非表示」を示す「hidden-**」は廃止されました。 webnetamemo.com なので、スマホサイズの時に非表示は「<p class="d-none d-sm-block">」のように書くことになります。 さて、これをこのままTableに適用すると、PCサイズの時に非表示に指定したカラム</p>…

配布のBootstrapテンプレートをRailsに導入する

世の中には親切な人が多いもので、格好いいBootstrapのテンプレートを配布している人がいます。有料のものなんかサポートも付いていたりして、デザインセンスが壊滅的な人にはありがたい世の中です。で、このテンプレートをRailに適用するにはどうしたらいい…

MySQLでソートを任意に制御する方法

文字列でソートする場合、普通にやると「AaBbCc」と並びますが、これを「ABCabc」とソートした場合のやり方。MySQLはソートにcaseを使えるので、それを利用します。 ORDER BY CASE WHEN ソート文字列 REGEXP '[A-Z]' then 0 WHEN ソート文字列 REGEXP '[a-z]…

AWS Cloud9 + Rails + MySQLで絵文字を扱う

参考にしたのはこちら。 qiita.com というわけで、MySQLの文字コードを確認するわけですが、そっちは既に「utf8mb4」でした。でもrailsの方で文字コードを「utf8」にしていたので、rake:dbした時にutf8でテーブル作ってしまっていたようなので、これを修正し…

AWS Cloud9でMySQLに乗り換える

諸事情により、ポスグレからMySQLにDBを変更することになり、開発環境のDBを変えることになりました。その手順です。 ※2018/7/30現在、AWS Cloud9には、MySQLが標準でインストールされているので、インストール作業は飛ばします 【MySQLにデータベースを作る…

deviceでtwitter連携時に「raise OAuth::Unauthorized, response 403」となった時の対応方法

deviceの使い方はこちら参照。 qiita.com で、この通りに進めて、サインアップページの下に出てくる「Sign in with Twitter」をクリックすると、 「raise OAuth::Unauthorized, response 403」 となってしまいました。ぐぐると、「Twitterの設定で、Callback…

独自定義のモデルを元にしたformのvalidatesを日本語化

変にハマったので、メモ。内容はここの続きです。あと、大前提として、「i18n」を入れて、日本語化の準備が出来ていることが必須です。 niki12260714.hatenablog.com この方法で戻ってくるエラーメッセージを見ると「col aは必須です」のように、モデルに定…

Active Modelを定義し、form_forを使用、validatesでエラー処理までの流れ

画面の入力項目が一つのテーブルだけではないというのはよくあるパターン。そうすると、form_forが使えないので、form_tagを使うことになります。が、そうするとvalidatesの処理とかセオリー通りにいかないし、form_forの方がBootstrapでごにょごにょするの…

railsで二つのセレクトボックスを連動させる

都道府県のセレクトボックス選ぶと、隣にある市町村のセレクトボックスの中身が変わる。そういう奴をrailsで作る方法です。ネットに沢山情報がありますが、自分が分かりやすかった方法がこちら。 【プログラムの動き】1.セレクトボックスにonchangeイベント…

AWS Cloud9でpumaを再起動

参考にしたのはこちら。 qiita.com ターミナルで「ps ax」を打つと、これが出てきました。 AWSの場合、「puma x.xx.xx~」を殺せばよい模様。「kill -9 6109」でpumaが終了するので、「rails s -b $IP -p $PORT」を打てば再起動する。 ※「server.pid」ファイ…

【調査中】railsでleft_joinsするモデルに対して条件を追加する方法

こちらと同じことをしたくて調べています。 teratail.com 自分の場合、まさに外部結合する方のテーブルに条件を追加するSQLを発行したいのです。 SELECT A.id, B.idFROM ALEFT OUTER JOIN B ON A.id = B.a_id AND B.col = (動的な値)WHERE A.col = (なんかの…

railsで親子モデルのそれぞれに条件設定してn+1問題を解決する方法

親子のモデルで結合する時、joinsかincludesを使うわけですが、取得結果表示で、「子供のループで回したい」となると、joinsだとn+1問題が発生します。なので、includesをしたいのですが、includesは「親に対してSQL実行」→「親の結果をもとに子のSQLを実行…

railsで親子孫ひ孫までをincludesする

自分メモ。沢山ある関連モデルをincludesする場合。 親.where(条件文).all.includes(子: [孫: :ひ孫])

子モデルで条件を設定し、includesする場合

今でも鮮明に覚えているんですが、初めて先輩に、業務で組んだコードをレビューしてもらった時。「なんでSelectのループの中で、またSQL発行しているの?」はい、効率とかリソースとか考えられない超初心者でした。それ以降、「SQL発行は極力1回で行う、ルー…

railsでAjax通信を行い、通信結果を元ページの指定位置にレンダリングする

色々方法はあるみたいですが、自分が理解しやすかった方法。 1.ViewにAjax通信するアクションと、通信結果を受ける個所を記述 この例だと、「groupsコントローラーのsearch_memberアクション」がAjax通信行うことになります。この時に「remote: true」を指定…

親子孫の3つのテーブルを関連付けてデータ取得

A,B,Cというテーブルがあって、それぞれ親→子→孫という関係とします。 Aモデル:has_many:bs(複数形) Bモデル:belongs_to:a(単数形)has_many:cs(複数形) Cモデル:belongs_to:b(単数形) ここで、cモデルにあるカラムをwhere句にして、Aモデルの値を…

親子関係にあるテーブルに一度にデータを保存する

親テーブルにデータを作ったら、そのidを使って子テーブルにもデータを入れたい場合がありますよね。というのをやってくれるのが、buildです。 まず最初に、各モデルに親子関係を記述します。※Aの子供がB、Bの子供がCとする Aモデル:has_many:bs(複数形) …

AWS Cloud9でPostgreSQLに対しrake db:migrateが失敗する

ここら辺、自動でやってくれるDBとかで開発していたんで、知らないから躓いたところでした。前回の記事の続きです。 niki12260714.hatenablog.com ここの記事で、「confファイルが見つからなかった」とありますが、ここが問題でした。 migrateのファイルを作…

AWS Cloud9でPostgreSQLを使ったrailsプロジェクトを立ち上げる

画面設計、DB設計に着手したんで、本格的に開発環境を整えていきます。ということで、sqliteではなく、PostgreSQLを使って開発することになりましたので、その設定。例によって、自分メモです。参考にしたのはこちら。 qiita.com お手本通り、コマンドを打っ…

Gemfile編集後のbundle updateでコンフリクト発生時の対応

Gemfileに新しいgemを追加して、「bundle update」を叩くとエラーが出ました。 『Bundler could not find compatible versions for gem "actionview"』 ググってみると、バージョンが競合してますよ、ってことらしい。「gem list」で今入っているgemのリスト…

AWS Cloud9で編集してからgithubへpushするまでのコマンド

gitを使い慣れていない自分のコマンドメモとして。 1.ブランチを切る※AWS Cloud9のbashで、今自分がいるブランチがmasterブランチであることを確認してから実施「git checkout -b "ブランチ名"」→実行すると指定したブランチ名に切り替わる ※この後にコード…