朝日ネット 技術者ブログ

朝日ネットのエンジニアによるリレーブログ。今、自分が一番気になるテーマで書きます。

オブジェクト指向を5年間理解できなかった人間がオブジェクト指向を説明する(第2回)

※9/16 タイトルを変更しました。

こんにちは。開発部社員のjiweenです。

前回 は本連載の概要とモチベーション、前提知識について解説しました。今回は本連載の結論として、オブジェクト指向を実践する上で重要な3つのルールを提案します。今回提案するルールが実際にどう応用されるのか、既存のパターンをどう説明できるのかは第3回以降で説明します。

今回の記事は抽象的な記述で言語機能を否定する分かりづらい部分があります。抽象的な記述に慣れない方は、今後公開される第3回以降も併せて読むと分かりやすいかと思います。

続きを読む

オフショア開発を4年間続けた成果と課題

開発部のm1calです。過去にオフショア開発について言及している記事がありますが、開発部における取り組みについてもう少し詳しく紹介しようと思います。

開発部では2018年度よりオフショア開発を採用しており、ベトナムのソフトウェア開発会社と契約しています。 私は昨年8月に前任者より引継ぎオフショア担当となり、オフショア開発案件の全体的な管理を担当しています。

  • オフショア開発採用の目的
  • オフショア開発体制
  • オフショア開発の進め方
  • オフショア開発を採用した成果
  • オフショア開発の課題
    • 認識齟齬による不具合増加
    • 案件依頼時の負担
  • 課題解決への取り組み
    • 認識齟齬による不具合増加への対策
    • 案件依頼時の負担への対策
  • 採用情報

オフショア開発採用の目的

開発コスト低減の目的以外に、大規模開発案件で朝日ネット社員のみでは要求されている期日にスケジュール的に難しい場合や並行して複数の開発案件を進める必要がある場合など開発活動の量産体制を強化するためにもオフショアを利用しています。

続きを読む

GHC 9.2 で導入されたQuick Look型推論アルゴリズムについて

初めまして、朝日ネット開発部の hogeyama です。 今回は Haskell の中級的なトピックとして、 GHC 9.2 で導入された Quick Look 型推論アルゴリズムを取り上げようと思います。

概要

Haskell のデファクトスタンダードなコンパイラである GHC では通常の多相(ジェネリクス)の一般化である非可述的多相(impredicative polymorphism)を実装していますが、その型推論アルゴリズムは長らく「型推論が弱い」「実装が不安定でコンパイラのバージョンアップでデグレが起きる」といった問題を抱えていました。

しかし昨年10月、Quick Look という新しいアルゴリズムが GHC 9.2 に実装されたことでこの問題が解決しました。 本記事ではこの Quick Look によって何が変わるのか、利用する際に何に気をつければよいのかを非可述的多相の概要から始めて説明していきます。

  • 概要
  • 復習:いわゆる普通の多相について
  • 可述性による制限
  • これまでのGHCにおける非可述的多相
    • 型推論が弱い
    • コンパイラバージョン間で互換性がない
  • Quick Look 型推論アルゴリズム:これからのGHCにおける非可述的多相
    • アイデア
    • 型推論能力の高さ
      • Maybe の例
      • -> の例
    • GHCの変更への強さ
  • 推論に失敗するケースと対処方法
    • ヒントの探索が打ち切られてしまう場合
    • 間違ったヒントを見つけてしまう場合
  • 代償
  • まとめ
  • 参考文献
  • 採用情報
続きを読む

オブジェクト指向を5年間理解できなかった人間がオブジェクト指向を説明する(第1回)

※9/16 タイトルを変更しました。

はじめまして。朝日ネット2021年度新卒社員のjiweenです。

オブジェクト指向は今や普通にプログラミングをしていれば必ずと言っていいほど遭遇するありふれた概念ですが、とても一筋縄ではいかない奥の深いプログラミングパラダイムでもあります。オブジェクト指向に悩まされ夜も眠れない全ての人のために、本連載ではなるべく初学者の目線からオブジェクト指向を分析し、オブジェクト指向を実践するための考え方を提案します。6回程続く長い連載になりますがお付き合いいただけると幸いです。

第1回 (今回) では全体の概要とモチベーションについての話をさせていただき、前提知識や仮定の確認を行います。第2回では本連載の結論として、オブジェクト指向設計における重要な考え方を説明します。第3回以降では、結論の具体的な説明と実践的な知識のため、GoFデザインパターンと呼ばれる設計パターンの分析を行います。

続きを読む

Haskellと余代数(Coalgebra)

ここではHaskellの中級者向けのトピックを簡単に取り上げたいと思います。

今回は余代数(Coalgebra)についてです。Haskellを書いていると『余(なんとか)』という言葉をみかけることがあります。これは英語の接頭辞 Co- の訳で、ここでは代数(Algebra)の双対(Dual)という意味で余代数と呼ばれています。

さてHaskellやOCamlのデータ型は一般に代数的データ型(Algebraic data type)と呼ばれます。このデータ型にパターンマッチングを加えて、(オブジェクト指向言語などと比較したときの)関数型言語の特徴と紹介されることも多いと思います。実はこのデータ型にはもともと余データ(Codata)と呼ばれるような相方がいたのですが、人類が扱うには早すぎたのか、データ型に比べると余データは長らく影の存在でありました(ちなみに余データは口語上はコデータと呼ぶかもしれませんが、ここでは文章なので余データと書くことにします。)

続きを読む

Haskellで図を作成してみましょう (その3)

開発部のgedokuです。

HaskellをeDSLのホスト言語として使うことの魅力を、作図を通じて伝えるシリーズの第二弾です。

  • 前書き
  • 図結合入門
  • 今回使う図結合の仕方
  • 目標に近づける
    • ノード二つを配置
    • ノードの塗りつぶし(寄り道)
    • 3つ以上のノードの配置
    • ノード配置の相対的な指定
      • 合成可能性 (1) の修正
      • シフトのハードコード (2) の修正
      • さらなる改善?
  • まとめ
  • 次回予告
続きを読む

継続的デリバリーのすゝめ

朝日ネットで開発の業務を担当している tommy です。

皆さんは、「継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化」という本をご存じでしょうか? 2012年発行(原著は2010年)で有名な本なので知っている方も多数いらっしゃると思います。 え?もう全部読んだことがある?...それなら私からお伝えすることはもうないです。ブラウザバックするか、よろしければこのブログの別の記事を読んでいってください。

この本はソフトウェアを安全に提供するために、基本的だけどとても重要なことがしっかりと書かれています。 ざっくりと内容をキーワードにまとめてしまうと、「自動化」と「テスト」です。 弊社内でもこれらの重要さは十分広まってきたのですが、それでも人によってそのモチベーションについては様々です。

私のように、テストを書かないと不安で夜も眠れないような人間もいれば、 テストを書けと言われているからただ書いている人、 また、忙しさにかまけてテストをあまり書いてくれないような人も残念ながら存在します。

今回はすべての(開発者に限らず)ソフトウェア提供に携わる人に自動化・テストの意義を今一度認識してもらいたくて、この記事を書こうと思いました。 本の中で、私が特に伝えたい点を4つピックアップして紹介します。このほかにもこの本には気を付けるべき重要なことがたくさん書かれています。

共感できる点がありましたら、ぜひ本を手に取ってみてください。

続きを読む