信頼はずっと、挑戦はもっと。

お問い合わせ
TEL:03-3496-3888

BLOG コアテックの社員ブログ (毎週月曜~金曜更新中)

LIST OF ARTICLES

記事一覧

  • テクログ

    SQLチューニング

    こんにちは!今回はSQLチューニングについて書いていこうと思います!(以下、MySQL想定で進めていきます)SQL(特にSELECT文)が遅い場合、直接的な要因の一つに、フェッチする件数が膨大になってしまうことが挙げられると思います。これを解消するためのアプローチとして大きく分けて2つ存在します。1.テーブルに適切なインデックスを設定するテーブルのカラムにインデックス(索引)を設定し、検索の効率化と高速化を図ります。基本的には絞り込みで使用するWHERE句のカラムに設定することが多いです。2.SQLを組み替えるテーブルの結合順を変更したり、サブクエリをJOINに変えてみたり...etcSQL自体を組み替えて検索の高速化を図ります。ではどのようにこれらを適用していけばいいか。。その助けになるのが「実行計画」です。実行計画とは最適なデータ取得処理を行うために生成された情報です。最適な方法はDBのオプティマイザ機能によって判断されます。実行計画を見る方法は、SQL文の先頭に「EXPLAIN」をつけて実行することです。例:EXPLAIN SELECT ...実際に実行すると画像のような項目を確認できます。実行計画を見て特に重要なカラム(赤字)で避けなければいけない値を説明します。typeALL: フルテーブルスキャン。インデックスがまったく利用されていないことを示す。index: フルインデックススキャン。インデックス全体をスキャンする必要があるのでとても遅い。ExtraUsing temporary,Using filesort(2種複合): 全てのテーブルをJOINしてからFilesortをするパターンこのようにボトルネックとなる部分を実行計画を参照しながら見つけていき、インデックスの設定やSQLの組み換えで解消していきます。ここまで書いてきましたが、SQLチューニングにおいて最も重要だと思うことを最後に書きます。それはチューニング前後で取得結果が変わらないことです。特にSQLの組み換えを行っていると起こりがちなので、この前提は忘れないようにしましょう。チューニング後にEXPLAINを外して実行し、取得結果に変動がないことを確認してください。SQLのチューニングは奥が深く沼になることもありますが、遅いSQLが早くなったときの達成感はすごいです。ステップアップとして、DBのチューニングについても学んでいかなければいけませんね。それではまた!

  • 画像:ブログサムネイル

    テクログ

    Flutterはじめました(2)

    お久しぶりです。のりさんです。梅雨も明けてかなり暑くなってきましたね。 みなさんいかがお過ごしでしょうか。 今回は前回書いた「Flutter(フラッター)」の続きでFlutterデモアプリのソースコードをみていきたいと思います。プロジェクトのフォルダをみていくとlibフォルダがあります。libフォルダはソースコードを入れておくフォルダでデモアプリのソースコードは「main.dart」という名前で保存されています。(FlutterはDart言語のため、dartという拡張子になっているようです)それでは「lib/main.dart」ファイルの中身を上からみていきたいと思います。①インポート定義 importすることで他のdartファイルの内容を利用できるようにしているようです。 上記の場合はマテリアルデザインを使うためのdartファイルをimportしているようですね。②main関数 アプリ起動時に最初に呼び出されるのがこのmain関数のようです。 その中でrunApp関数を呼び出してプログラムを実行しています。 ・runApp関数とは  引数に渡されたWidget(ウィジェット)から画面を描画をしてくれる関数のようです。  参考:https://api.flutter.dev/flutter/widgets/runApp.html ・Widget(ウィジェット)とは  FlutterアプリのUIを構成する部品らしいです。  イメージとしては以下の感じでしょうか。  ・アプリケーション全体(MyAppのMaterialApp)  ・画面全体(MyHomePageのScaffold)  ・画面パーツ(ScaffoldのText)  ・画面レイアウト(ScaffoldのCenterやColumn)  小さいものから大きく纏まっているものまであるということですね。 デモアプリの場合は、「MyApp()」という部分でWidgetのインスタンスを生成しています。 (Dartではnewを書かなくてもクラスのインスタンス生成が可能だったりします)③MyApp(Widget) MyAppはrunApp関数に渡されていたので、アプリ全体のWidgetという感じでしょうか。 StatelessWidgetという状態を持たないWidgetをベースに作られていて buildメソッドでは、画面全体をマテリアルデザインにするために MaterialAppというWidgetを作って返しているようです。 (見た目をiOSっぽくしたい場合は、CupertinoAppを使うようです) 次にMaterialAppのコンストラクタをみてみます。 title、theme、homeと名前付き引数で値が渡されていて homeでは、さらにMyHomePageというWidgetを作って渡しています。 このような感じでFlutterではWidgetの中でさらにWidgetを作っていき buildメソッドが連鎖して実行され、UIを構築していく仕組みになっているようですね。④MyHomePage(Widget) MyAppにあるMaterialAppのhomeで渡されていたWidgetです。 こちらはStatefulWidgetという状態を持っているWidgetをベースに作られているようです。 状態を持たせるためにcreateStateメソッドでStateを作っているようですね。 (デモの場合は_MyHomePageStateというStateを作っています)⑤_MyHomePageState(State) こちらはMyHomePage(Widget)用のState(状態)クラスです。   ソースをみてみるとStateの方にbuildメソッドがありますね。 StatelessWidgetでは、Widgetにbuildメソッドがでてきましたが StatefulWidgetではStateの方に存在しているようです。  もう少し細かくみていきます。 buildメソッド  Scaffold(スキャフォールド)というWidgetを作って返しています。  これはマテリアルデザイン用の画面全体を作るための部品のようですね。  (見た目をiOSっぽくしたい場合は、CupertinoPageScaffoldを利用するようです) Scaffold (Widget)  コンストラクタの引数をみてみるとWidgetを渡してレイアウトを作っているようですね。  引数は    appBar:画面上部に表示するアプリバーの部分です。           AppBar(Widget)のtitleにText(Widget)でタイトルを設定しています。    body:メインコンテンツ部分        Center<中央揃え>やColumn<縦配置>、TextのWidgetを作っています。        テキストにはカウンタ用の_counter変数を利用して表示しているようです。    floatingActionButton:右下に表示される丸いボタン               デモではFloatingActionButtonとボタン押下時等の設定                                                              状態が変わったことを伝えるsetState関数を使うことで               再度buildメソッドが呼ばれて画面が更新されます。  という感じになっているようです。  Scaffoldについて画面に枠をつけるとしたらのこんなイメージでしょうか。   今回はデモのソースからFlutterアプリが、どういった動きをしているか書いてみました。 まだまだ知識不足なので簡単なアプリから作っていきたいと思います。

  • 画像:ブログサムネイル

    グルメ

    ダイエット食、沼

    こんにちは、ひこです。今回はグルメカテゴリーだけど、グルメと対極にある「沼」について紹介します。最近社内でも話題になっているダイエット食です。また、決して食べ物には見えない画像も出てくるので、お食事中の方はご注意ください。そもそも沼とは、Youtubeチャンネル「マッスルグリル」さんが紹介された減量食のことです。マッスルグリルは2人組のグループなのですが、二人ともボディメイクと関わりが深い(ボディビルと格闘家)ので様々な減量食、栄養食が出てきます。その中でも手軽に作れカロリー計算も簡単、そしてインパクトの強い「沼」はメディアなどでも取り上げられ、ボディメイクを意識しているモデルや芸能人にも取り上げられています。ではここで具体的な作り方を書いていきます。初めに必須ではないですが自身の基礎代謝を計算しておくと、より追い込んだダイエットが可能になるようです。基礎代謝計算サイト自分の場合は1700kcal位なので、今回はその数値をもとにやっていきます。次にPFCバランスを決めます。PFCとは「Protein/タンパク質」、「Fat/脂質」、「Carbohydrate/炭水化物」の頭文字です。これらの栄養素の理想的なバランスはP:13~20%、F:20~30%、C:50~65%程度と言われています。今回はダイエット目的なので、脂質少なめの2:2:6位のバランスで行きましょう。先ほどの基礎代謝(1700kcal)をPFCバランスに当てはめると、P:340、F:340、C:1020となります。あとはこのカロリーを満たす食材を軽量して炊飯器に入れるだけです。本家沼に倣ってPは鶏むね肉(皮なし)、Fは卵、Cはちょっと変えて玄米にします。リンク先のカロリーをもとに計算すると、鶏むね肉/314g、卵/225g(4個弱)、玄米/618gとなります。厳密には鶏肉にも脂質がありますし、卵にもタンパク質がありますが、雑ダイエットならこの位で大丈夫です。最後に味を調えるためにダシの出る食材、昆布やシイタケ、カレー粉などを入れましょう。私はお徳用の昆布と適当な液体ダシ、S&Bのカレー粉を入れています。5号炊きの炊飯器だと結構ぴったりな量になるので、そのまま炊いて炊き上がったら水を追加しおかゆ状にします。おかゆ状にすることで、カサが増え同じカロリーでもたくさん食べて満足感を得られるようになります。(画像は拾い物です)一回計算してしまえば、あとはひたすら軽量して炊飯器に入れるだけで済むので確かに楽です!ただ沼だけ食べていると、ビタミンなどが不足する為適度に野菜などもとりましょう。基礎代謝分を少し少なめにして、サラダやフルーツを追加すると理想のダイエット食になりますね。最後に、沼だと簡単にカロリー調整ができますが、体調を崩さないためにも基礎代謝分は割り込まずに、軽い運動などで消費カロリー分のダイエットがおすすめです。この方法だとスマホなどで計測すれば、運動での消費カロリー=自分の脂肪燃焼となるのでモチベーションにもつなげやすいです。皆さん無理なく良いダイエットライフをお過ごしください。

  • 画像:ブログサムネイル

    グルメ

    目玉焼きの研究

    ゆっけです。皆さんは在宅ワークの朝ごはん、何食べますか?自分は最近目玉焼きにはまってます。材料:・たまご・塩・黒胡椒食べる時に白身がドゥルっちゃわないように、フライパンにたまご入れたら白身だけ指で切ります。周りのカリカリしたとこを作るために最初は油多め、火強めにします。あとは、黄身に火が入らないように、フライパンに蓋しつつギリギリの温度を攻めます。私の中のたまご好きが暴れだしそう。ソースでもいいんですが、最近買ったイイ塩が美味しかったので塩胡椒にしてます。すごく美味しいです。(語彙力)ちなみに、黄身に塩かけると変質(白くなる?)するので、かけるのは黄身だけがおすすめです。あと、この塩何にかけても美味しいです。塩の味がしない塩。(伝われ)https://www.amazon.co.jp/dp/B000FQ5VKS/ref=cm_sw_r_tw_dp_G8CK35K4RG93BPAYEGJ4たまごの話だけで長くね?大丈夫そ?栄養が偏りがちな在宅ワーク時の朝ごはん、みなさんも目玉焼きを追加してみてはいかがでしょうか。

  • 画像:ブログサムネイル

    雑記

    捨てられていた猫は金色に輝く猫だった

    うちの猫を紹介させていただきます。アビシニアンという、エジプトだかエチオピアだか出身の由緒ある猫らしいです。なんでも、古代エジプトの壁画や出土品にこの猫とよく似た猫が描かれているそうな。で、なんでそんな猫が東京の場末に住んでいるのか。蒲田で捨てられていた約15年ほど前当時、私の奥さんのお姉さんが大田区蒲田の路上で、全身をガムテープでぐるぐる巻きにされている生後まもない子猫を拾いました。家に持ち帰り、ガムテープを慎重に剥がしてあげミルクを与えても、全身の毛がむしられたこの子猫は怯えてしまって、まったく懐かなかったそうです。金色に輝く猫に変身なにより、毛の色にびっくりしました。日に当たると金色に輝くように見えるのです。若干リッチブラックが混じったつやつやなのにふわふわな毛並みは彼女の自慢なのでしょう。※今更ながらメスです。※かなり気持ちいいです※ずっとさわってしまいます。※顔をうずめてしまいます。毛が生えそろった時は、奥さん家族はその輝きに驚いたそうです。ガラケーに唯一残ってた子猫時代やんちゃな性格私がこの猫と初めて出会った時、初対面の私ににゃーにゃーとご飯をせがみ、奥さんのお姉さんのサンダルにう〇こはするし、やたらと走りまわる血気盛んな猫になっていました。一般的にアビシニアンはもの静かで大人しいらしいのですが、うちのアビシニアンは真逆。とにかく気分屋で、撫でようものなら牙をむく時もありました。おそらく、人間に虐待を受けてきた時のことが忘れられないのでは?と思い、素直に噛まれることにしてました。まるくなった現在人間の年齢で75歳くらいになるのですが、現在もぴょんぴょん跳ねまわって元気に過ごしています。ただ、人間に対して暴れて引っ搔いたり噛みついたりといったやんちゃぶりは落ち着いてきています。自虐を覚えたらしい最後にエピソードうちの子供が赤ちゃんの時に尻尾をギュっと掴んでしまい、「フギャー!」と叫んだので慌てて引き離しました。当時、気性の荒い猫だったので、爪と牙で赤ちゃんがやられる!?と心配しましたが、その時猫は変な声をあげながら我慢していました。その直後、私と奥さんのところに来て、ふくらはぎをおもいっきり噛んできた時、私たちは親としてその鋭い牙を素直に受け入れました。

  • 画像:ブログサムネイル

    at CORETECH

    コアテックのQAチームについて

    こんにちは。きっちーです。今回は私が所属しているQAチームについて書きます。その前にそもそもQAとは、Quality Assuranceの略で品質保証の意味です。https://www.weblio.jp/content/QA?edc=BINIT上記サイトでは「データの文書化や保存、製品やシステムの性能や機能を保証するための検証作業のことである。」と記載されています。【その他参考】QAエンジニア:https://qiita.com/jun2014/items/32ec77be1056f546aadaさて、QAが行う作業は組織によって様々ですが、コアテックのQAチームの主な作業はテストです。開発ではなく独立した立場(第三者)の観点で、静的テストやブラックボックステストをして一定の品質を担保するのがミッションです。テスト後は振り返りをおこない今後のテストにつなげていきます。また業務の最適化や品質向上につながる提案があればどんどん出していきます。それからチーム内での勉強会や、各自が参加・視聴したウェビナーの共有もおこなっています。直近では、上流工程でのテストに関する作業の取り組み方についての勉強会を開催しました。体系的なテストに関する知識習得のためにJSTQBの問題を1日1問1答ということもやっています。(QAチームわりと勉強熱心です!)チームは現在10人で構成されています!・課長1人・PM1人・メンバー8人ちなみに課長以外は全員、基本的にフルリモートです!メンバーそれぞれ得意分野や好きなテストがあります。例えば・作成するドキュメントのクオリティが高い人・探索的テストでたくさんバグ出し出来る人・仕様書レビューによる静的テストが好きな人などです。属人化しないよう全員が上流~下流までのいろいろな作業に携わります。QAチームは自分の経験が浅い作業であっても得意な人に聞くことが出来る雰囲気なので積極的にキャッチアップしていけばどんどん成長出来る環境です。QAチームで働いていて感じるのは、求められるスキルが多いということです!テストスキルのほかにセキュリティの知見、0から作り上げる力や発想力、コミュニケーションスキル、ドキュメント作成スキルetc...自分が目指すポジションに向かうために必要なスキルを身につけたり経験していきたいものですよね。コアテックのQAチームはそういった相談も気軽に出来る雰囲気です。またQAチームだけでなくコアテック全体として、手を挙げればチャレンジさせてくれる文化があります。例えばテスト自動化のエンジニア(SETエンジニア)を目指したい場合は、その旨を上長に伝えることで自動化の案件にアサインしてもらえるイメージです。やりたいことや目指すポジションを意思表示することで、それを実現するためにサポートしてくれる環境です。今回はコアテックのQAチームについて簡単に紹介しました。また何か思ったことが出てきたら書きます。ではでは。