朝日ネット 技術者ブログ

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

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年半が過ぎました。

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

続きを読む

UI/UX: マニュアル作成を通したユーザ疑似体験から画面設計を見直す

開発部のasakuraiuです。

現在はISP事業で主にPMやチームリーダーを担当しており、数年前までは「manaba」事業でPM、外部仕様を担当していました。 今回は「manaba」事業時代を思い出しながら、外部仕様、特に画面設計の観点からお話します。

画面設計は使う人目線で考えることが大事になりますが、実際ある程度動くものができないと見えてこない穴もあると思います。 これらの穴にどれだけ早く気付いて修正できるかはひとつの腕の見せ所にもなります。 私の場合、新機能開発中のマニュアル作成過程が、ユーザの疑似体験にもなり画面設計の穴に気づく大きなステップとして機能していました。 この記事ではそのステップをまとめてみました。

  • はじめに: manaba とは
    • manaba のマニュアル
  • 画面設計の output
  • マニュアル草稿を作ってみる
    • 「かんたんな手順」を書いてみる
    • 「画面イメージ」を用意してみる
  • 立ち止まって見渡す・気づく
    • 固定文字列が長すぎる・読みづらい
    • データ表示・入力枠が狭すぎる・広すぎる
    • テーブルに列が多すぎる
    • 画面がうるさい
    • 機能への導線が見つけづらい
  • まとめ
  • 採用情報
続きを読む

「manaba」におけるSingle Sign-On (SSO)サービスについて【後編】

朝日ネットシステム基盤部のGernot Hassenpflugです。主に仮想インフラ、サーバ運用と認証システム連携を担当しています。

  • 朝日ネットのSSOインフラとサポート業務
    • SSOの実装と運用の問題点
      • SLO (Single Logout)について
    • 運用の問題
      • セキュリティー設定
      • 証明書更新
      • バージョンアップ
      • メジャーバージョンアップ
  • まとめ・将来に向けて
    • メタデータ管理改善
    • 「manaba」のフェデレーション利用に向けて
    • さらに実装する予定の連携とカスタム設定
  • 最後に
  • 参考
  • 採用情報
続きを読む

新卒社員との座談会 第2弾

はじめに

サービス基盤部のxfuzzyです。 2020年4月入社の新卒社員と先輩社員が、ざっくばらんに話す、座談会の第2弾を行いましたので、レポートします。 第1弾はこちらです。 今回は、新卒社員が受けた研修の感想と、先輩社員とのQ&Aが主な内容です。

前回同様、座談会は、朝日ネットのセミナールームで、密にならないように留意してお弁当を食べながら実施しました。

f:id:watanabe06:20210219164139p:plain:h300
座談会の時に用意したお弁当

  • はじめに
  • 研修の感想
  • 先輩社員とのQ&A
  • まとめ
  • 採用情報
続きを読む

席替えをGraphvizに任せてみた

開発部の8lukaです。

当社オフィスの開発部執務スペースでは、各自にパーティションつきの座席とデスクトップPCが割り当てられています。 2021年2月現在リモートワーク中心の業務体制が敷かれている状況ではオフィスの座席の物理的な位置の意味は薄いのですが、 出社時には従事している案件に応じて近い位置でやりとりができることが重要で、時々席替えが実施されます。

今回は、そんな席替えの効率化の試みについての簡単なレポートです。

続きを読む