朝日ネット 技術者ブログ

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

GoFデザインパターンとオブジェクト指向の再解釈(第1回)

はじめまして。朝日ネット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つピックアップして紹介します。このほかにもこの本には気を付けるべき重要なことがたくさん書かれています。

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

続きを読む

Python の open 関数と io モジュールをきちんと使うために

はじめに

開発部の ikasat です。 Python の言語・ライブラリ・処理系はプログラマのタスクを手早く簡単にこなせるようにするために設計されており、数行程度のコードを書いただけでも内部で様々なことをやってくれます。 しかし、この便利さが特定のユースケースにおいては逆にお節介になってしまうこともあり、また内部動作が複雑であることにより挙動を修正する方法も分からなくなりがちです。

特に組み込みの open 関数や標準入出力 (sys.stdin, sys.stdout) はその最たる例であり、UnicodeEncodeError / UnicodeDecodeErrorTypeError: a bytes-like object is required は Python を使った人であれば誰もが見たことのあるエラーメッセージでしょう。 私自身これまでこの類のエラーが出た時には検索して出てきた情報を基に場当たり的な対処をしてきましたが、この機会に入出力の仕組みと io モジュールについて調べることでようやく問題に確実に対処できるようになりました。 というわけで今回は Python の入出力についてやや深めに解説していきます。

対象読者

本記事の構成

  • 最初に I/O に関するよくある問題への対処方法について記載します
  • 次にこの対処方法に関連した io モジュールの解説を行います
  • おまけとして CPython の内部実装に触れたり他言語 (Java, Go) の I/O 系モジュールの比較を行ったりします
  • はじめに
  • 対象読者
  • 本記事の構成
  • 対象環境
  • よくある問題への対処
    • open の encoding 引数を指定しよう
    • 一括してファイル入出力のエンコーディングを変更するには?
    • str / bytes の変換に使う encoding について
    • 標準入出力のエンコーディングを変えるには?
    • codecs.open ではなく組み込みの open を使おう
    • ファイルへの書き込みを正しく行おう
  • Python の I/O を知る
    • Python における str と bytes の変換
    • io モジュールについて知る
    • open 関数の引数
      • モードとバッファリング
      • テキスト I/O に関する設定
      • raw I/O に関する設定
    • sys.stdin / sys.stdout / sys.stderr の正体
    • ファイルオブジェクトの内容のコピー
    • 標準ライブラリでのファイルオブジェクトの使われ方
  • おまけ: 高度な Tips
    • io と _io の関係について
    • Python の open 関数と open システムコールの対応
    • 他言語との比較
  • おわりに
  • 採用情報
続きを読む

VMware PowerCLI の並行実行 (RunspacePool 編)

サービス基盤部の羽賀です。

私の担当している業務のうちに VMware 社の vSphere という製品上で動作する仮想マシン(VM)の管理があります。

vSphere では管理用の製品である vCenter Server の Web インターフェースを操作することで管理を行えますが、 VMware が提供する PowerShell モジュールである PowerCLI を用いて PowerShell スクリプトで vCenter Server に対してコマンドを発行することもできます。 私の業務においては、反復して行ったり、対象が多い作業についてはこれを利用して PowerShell スクリプト化し、 Windows 10 に標準でインストールされている Windows PowerShell 5.1 で実行することで効率化を行っています。

ただ、同時に多くの対象に対して同じ作業を行いたいという場合は直列で実行すると待ち時間が長くなってしまいます。 そのような場合に、処理を並行あるいは並列で実行することで、その作業全体が終わるまでの時間を短くすることができることがあります。

続きを読む

ASAHIネット会員専用ページを(だいたい)刷新しました

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

ASAHIネット会員専用ページを刷新します という記事を投稿してから1年半が過ぎました。

その間にプロジェクトが進行し多くの手続き窓口が新システムに移行されました。 タイトルの "だいたい" が示す通りまだ完全移行には至っていないのですが、主要な手続き窓口で移行が進んできたのでそれらの移行についてスポットを当ててみようと思います。

続きを読む