投稿者: sumito.tsukada

  • Ubuntuコンテナにおける利用可能なPHPの version について

    Ubuntuコンテナにおける利用可能なPHPの version について

    背景

    PHPは広く使用されているオープンソースの汎用スクリプト言語で、特にWeb開発に適しています。Dockerコンテナ内で異なるバージョンのPHPが利用できるかどうかは、開発やデプロイのプロセスに大きな影響を与える可能性があります。

    最近、異なるUbuntuコンテナでインストール可能なPHPのバージョンを深く掘り下げる必要がある状況に遭遇しました。

    発見プロセス

    当初、ubuntu:18.04ベースのDockerコンテナにPHPバージョン7.3以上をインストールしようとしました。ppa:ondrej/php を追加しても、7.2以上のバージョンのPHPをインストールすることができませんでした。

    私のプロジェクトの多くは、様々な依存関係やそれ以降のPHPバージョンで導入された機能により、少なくともPHP 7.3が必要だったため、この制限は大きな課題となりました。

    Ubuntu 18.04での実験

    ubuntu:18.04コンテナを使い、以下のコマンドを活用してPHP 7.3と8.0のインストールを試みました

    sudo add-apt-repository ppa:ondrej/php
    sudo apt-get update
    sudo apt-get install php7.3

    以下の様なエラーになりました

    E: Unable to locate package php7.3
    E: Couldn't find any package by glob 'php7.3'
    E: Couldn't find any package by regex 'php7.3'

    Ubuntu 20.04への乗り換え

    ubuntu:18.04で直面した課題に促され、Dockerコンテナをubuntu:20.04に切り替えることにしました。

    同じ手順を適用したところ、PHPバージョン7.3、7.4、そしてPHP 8.0まで問題なくインストールできました。

    分析

    このことにより、ベースイメージが利用可能なPHP の version に影響することが明確になりました。Ubuntu 18.04は古いLTSリリースであるため、時には複雑な設定を追加しなければ、7.2以上のPHPバージョンをネイティブにサポートしていません。

    対照的に、最新のLTSバージョンであるUbuntu 20.04は、ソフトウェアの互換性と可用性の進歩を反映して、新しいPHPバージョンをすぐにサポートしています。

    結論

    Docker環境でPHPを扱う開発者やDevOpsエンジニアにとって、ベースコンテナイメージとソフトウェアパッケージの可用性の関係を理解することは非常に重要です。

    PHPのバージョン7.3以降を使用する予定であれば、ubuntu:20.04コンテナを選択するのが、より簡単で効率的な選択かと思います。

    推奨事項

    • プロジェクトのセットアップを開始する前に、選択したUbuntuコンテナのバージョンとのPHPバージョンの互換性を必ず確認してください。
    • 新しいPHPバージョンのサポートが必要な場合は、Dockerコンテナを新しいUbuntuバージョンにアップグレードすることを検討してください。
    • UbuntuのリリースでサポートされているPHPのバージョンについて常に情報を入手し、スムーズな開発とデプロイを行いましょう。

  • Understanding PHP Version Availability in Ubuntu Containers

    Understanding PHP Version Availability in Ubuntu Containers

    Introduction

    When working with Docker containers based on Ubuntu, one might encounter limitations regarding the availability of PHP versions. This blog post explores these limitations, specifically between Ubuntu 18.04 and Ubuntu 20.04 containers, and provides insights into how you can successfully manage PHP installations within these environments.

    Background

    PHP is a widely-used open-source general-purpose scripting language that is especially suited for web development. The availability of different PHP versions in Docker containers can significantly affect your development and deployment processes. Recently, I encountered a situation that necessitated a deeper dive into which PHP versions are installable on different Ubuntu containers.

    The Discovery Process

    Initially, I attempted to install PHP versions 7.3 and above in a Docker container based on ubuntu:18.04. Despite my efforts and even after adding the popular Ondřej Surý PPA, I was unable to install PHP versions higher than 7.2. This limitation posed a significant challenge, as many of my projects required at least PHP 7.3 due to various dependencies and features introduced in later PHP versions.

    Experimenting with Ubuntu 18.04

    Using the ubuntu:18.04 container, I attempted to install PHP 7.3 and 8.0 by leveraging the following commands:

    sudo add-apt-repository ppa:ondrej/php
    sudo apt-get update
    sudo apt-get install php7.3

    However, I encountered the following issue:

    E: Unable to locate package php7.3
    E: Couldn't find any package by glob 'php7.3'
    E: Couldn't find any package by regex 'php7.3'

    Switching to Ubuntu 20.04

    Prompted by the challenges faced with ubuntu:18.04, I decided to switch my Docker container to ubuntu:20.04. After applying the same steps, I was pleasantly surprised to find that I could successfully install PHP versions 7.3, 7.4, and even PHP 8.0 without any issues.

    Analysis

    This experience highlighted a crucial aspect of working with Docker and Ubuntu containers – the base image significantly impacts the availability of software packages. Ubuntu 18.04, being an older LTS release, does not natively support PHP versions higher than 7.2 without additional, sometimes complex, configurations. In contrast, Ubuntu 20.04, a more recent LTS version, has out-of-the-box support for newer PHP versions, reflecting the advancements in software compatibility and availability.

    Conclusion

    For developers and DevOps engineers working with PHP in Docker environments, understanding the relationship between the base container image and software package availability is crucial. If you’re planning to use PHP versions 7.3 or newer, opting for an ubuntu:20.04 container would be the more straightforward and efficient choice.

    This exploration not only solved my immediate problem but also served as a valuable reminder of the importance of keeping both software and knowledge up to date. I hope sharing this experience helps others navigate similar challenges in their development workflows.

    Recommendations

    • Always check the PHP version compatibility with your chosen Ubuntu container version before starting your project setup.
    • Consider upgrading your Docker container to a newer Ubuntu version if you require support for newer PHP versions.
    • Stay informed about the PHP versions supported by Ubuntu releases to ensure smooth development and deployment processes.
  • 英会話のニュアンス:賢さを皮肉る

    英会話のニュアンス:賢さを皮肉る

    この記事を読んで学べること:

    • 英会話でよく使われる皮肉や嘲笑を表す表現を理解する。
    • ネイティブがよく使う皮肉なトーンを感じ取る。

    今回の表現: “Sneaking past me, huh? You must really think you’re smart!”

    日本語訳: 「俺をこっそり通り抜けようとしたな? 本当に自分が賢いと思っているんだろう!」

    文法解析: この文は現在分詞「Sneaking past me」を使い、進行中の行動を表しています。「huh?」は相手の行動に対する確認や反応を示す間投詞です。「You must really think you’re smart」は、話者が相手が賢いと自負していると推測する皮肉を表しています。

    他の表現との違い:

    オリジナルの表現似た表現使い方の違い例文
    You must really think you’re smartYou think you’re clever, don’t you?ほぼ同じ意味だが、より挑発的な響きがあるYou think you’re clever, don’t you, sneaking around like that?
    Sneaking past meGetting by me unnoticedより直接的で事実的な表現He was getting by me unnoticed until I heard a noise.

    英語学習者として覚えておくべきポイント:

    • このような表現は話者の感情やトーンを重要視するため、状況をよく理解して適切に使用する必要があります。
    • 「You must really think」は推測を強調する表現で、皮肉や挑発の文脈でよく使われます。

    解説: 今回の記事では、英語の皮肉や嘲笑を表すフレーズの理解を深めることを目指しています。特に、「Sneaking past me, huh? You must really think you’re smart!」という表現を通じて、文脈に応じた表現の重要性と、感情を込めた言葉選びについて学びます。コミュニケーションスキルを磨く上で、これらのニュアンスを掴むことは非常に役立ちます。

  • ゲームの中のイディオム:役に立たないものを識別する

    ゲームの中のイディオム:役に立たないものを識別する

    この記事を読んで学べること:

    • ゲームのセリフを通して英語のイディオムを理解する。
    • 文脈に応じた英語表現の使い分けを学ぶ。

    今回の表現: “No… Stop that, you idiot… I said a million times, that one’s just a decoy…”

    日本語訳: 「だからダメだってば、バカ… 何百万回も言っただろ、それはただの囮だよ…」

    文法解析: この文は命令形と強調を使っています。「No…」は命令を強調し、「Stop that」は直接的な命令です。「you idiot」は相手を非難する際の表現で、「I said a million times」は過去に繰り返し言ったことを強調しています。最後の「that one’s just a decoy」は、「that one」を主語にして「just a decoy(ただの囮)」と説明しています。

    他の表現との違い:

    オリジナルの表現似た表現使い方の違い例文
    Stop that, you idiotCut it outよりくだけた表現Cut it out, will you?
    I said a million timesI’ve told you over and over同じ意味だがよりフォーマルI’ve told you over and over, it’s not going to work.
    just a decoymerely a distraction「decoy」は具体的な囮、「distraction」は注意をそらすためのものThe leaked information was merely a distraction from the real issue.

    英語学習者として覚えておくべきポイント:

    • 「you idiot」のような表現は非常に失礼なので注意しましょう。フレンドリーな状況でも、関係が十分に親密でない限り避けるべきです。
    • 「I said a million times」のように誇張を用いることで強調する表現は一般的です。しかし、ビジネスやフォーマルな場では使用を避け、より適切な言い回しを選びましょう。

    解説: この記事では、一般的な英語学習者がゲームのセリフを通じて、日常英会話で使われるイディオムや表現を学ぶことができます。特に、強調や命令形の使い方、そして固有の表現「just a decoy」の理解を深めることができるでしょう。効果的なコミュニケーションは、文脈と適切な言葉の選択から成り立っています。

  • 伝説のフィーンドロードの神殿–冒険に満ちた英語表現

    伝説のフィーンドロードの神殿–冒険に満ちた英語表現

    この記事を読んで学べること:

    • 英語で冒険や発見を描写する方法
    • ミステリアスな場所を表す語彙の使用
    • 豊かな想像力を刺激する表現の探求

    今回の表現: “Somewhere within this complex, there’s a shrine to the Fiendlord. I heard there’s treasure to be found there as well.”

    日本語訳: 「この建物群のどこかに、フィーンドロードの神殿がある。そこには宝物もあると聞いた。」

    文法解析: このセンテンスは、特定の場所についての情報と、それに関連する興味を引く詳細を提供しています。「there’s a shrine」は存在を示す表現で、”I heard” は第二手の情報を伝えるフレーズです。

    他の表現との違い:

    オリジナルの表現似た表現使い方の違い例文
    there’s a shrinethere lies a sanctuary“there’s a shrine” は一般的な表現。「there lies a sanctuary」はより詩的で古風な響きがある。“In the heart of the forest, there lies a sanctuary untouched by time.”

    英語学習者として覚えておくべきポイント: 冒険や探索に関連する話をする際は、「shrine」という言葉が神聖な場所を表すのに適しています。「I heard」は噂や未確認の情報を伝える際に役立ちます。

    解説: ビジネスでのコミュニケーションにおいては、’I heard’ のような表現は、未確認の情報を伝える際に便利ですが、事実を確認することが重要です。また、’shrine’ のような言葉は、会社の中核となる価値観や文化について話す際に比喩的に使用することができます。

  • MSALを使ってOneDriveにユーザー代理でアクセスする

    MSALを使ってOneDriveにユーザー代理でアクセスする

    はじめに

    Microsoft Graph APIを使用すると、Microsoft 365のデータにアクセスできます。この記事では、Microsoft Authentication Library (MSAL) を使用してOneDriveにユーザー代理でアクセスする方法と、遭遇したいくつかの問題の解決方法を紹介します。

    OneDriveへのアクセス

    MSALを用いたアクセストークンの取得

    まず、MSALを使用してアクセストークンを取得します。以下の例では、ユーザーネームとパスワードフローを用いています。

    import msal
    
    def acquire_token_by_username_password():
        client_id = "--クライアントID--"
        tenant = "--テナント名またはID--"
    
        authority_url = f'https://login.microsoftonline.com/{tenant}'
        app = msal.PublicClientApplication(client_id=client_id, authority=authority_url)
        return app.acquire_token_by_username_password(
            username=settings.get('user_credentials', 'username'),
            password=settings.get('user_credentials', 'password'),
            scopes=["https://graph.microsoft.com/.default"])
    
    
    

    GraphClientを使用してOneDriveのデータにアクセス

    トークンを取得したら、GraphClientを使用してOneDriveにアクセスします。

    from office365.graph_client import GraphClient
    
    client = GraphClient(acquire_token_by_username_password)
    drive_items = client.me.drive.shared_with_me().execute_query()
    for item in drive_items:
        print(f"Drive Item url: {item.web_url}")
    
    
    

    遭遇した問題とその解決方法

    認証エラーの解決

    認証時にinvalid_clientというエラーが発生した場合、クライアント秘密キーまたは証明書が正しくない可能性があります。ConfidentialClientApplicationクラスを使用して、証明書を用いた認証を試みます。

    import os
    import msal
    
    cert_path = '/path/to/your/certificate.pem'
    with open(cert_path, 'r') as f:
        private_key = f.read().strip()
    
    authority_url = f'https://login.microsoftonline.com/{tenant}'
    app = msal.ConfidentialClientApplication(
        client_id=client_id,
        client_credential={"private_key": private_key, "thumbprint": thumbprint},
        authority=authority_url)
    
    

    タイプエラーの解決

    TypeError: 'dict' object is not callable というエラーに遭遇した場合、GraphClient コンストラクタがコールバック引数を期待しているため、辞書を直接渡すのではなく、トークンを返す関数を渡す必要があります。

    def acquire_token():
        # トークン取得のコード
        return msal_app.acquire_token_on_behalf_of(user_assertion=id_token, scopes=["https://graph.microsoft.com/.default"])
    
    graph_client = GraphClient(acquire_token)
    

    まとめ

    この記事では、MSALを使用してOneDriveにユーザー代理でアクセスする方法と、遭遇した問題の解決策を紹介しました。Microsoft Graph APIは強力であり、これを使用することでMicrosoft 365のさまざまなサービスと連携できます。

  • 狡猾な計画の成功–英語で巧妙さを伝える

    狡猾な計画の成功–英語で巧妙さを伝える

    この記事を読んで学べること:

    • 巧妙な計画を表す英語のフレーズ
    • 成功を自慢する際の表現方法
    • 英語における自己表現の工夫

    今回の表現: “Yakra’s a genius! His plan to imprison the Chancellor and take on his role worked like magic!”

    日本語訳: 「ヤクラは天才だ!宰相を監禁して彼の役割を引き継ぐ計画は、まるで魔法のように成功した!」

    文法解析: この文は、尊敬と賞賛を込めた宣言で、動詞 “worked” を使い、計画が非常に上手くいったことを示しています。「like magic」はメタファーとして用いられ、スムーズな成功を強調しています。

    他の表現との違い:

    オリジナルの表現似た表現使い方の違い例文
    worked like magicwent off without a hitch“worked like magic”はスムーズで予想外の成功を示す。”went off without a hitch”は何の問題もなく計画が進んだことを意味する。“The event went off without a hitch.”

    英語学習者として覚えておくべきポイント: 「worked like magic」は、計画やアイデアが予想以上に上手く行った時に使う表現で、クリエイティブな成功を強調したいときに効果的です。

    解説: プロジェクトや戦略が成功したときに「worked like magic」という表現を使うことで、その成果を強調し、チームの士気を高めることができます。ただし、この種の表現はカジュアルな状況に適しており、公式の報告や文書ではより正確な表現を使うことが適切です。

  • 秘密の宴会–楽しさ溢れる英語表現を学ぼう

    秘密の宴会–楽しさ溢れる英語表現を学ぼう

    この記事を読んで学べること:

    • ユーモアを交えた自慢話の英語表現
    • 誇張された形容詞の使い方
    • 英語における食事の楽しみ方

    今回の表現: “Those ones we ate last time weren’t so bad. And those two soldiers we just caught look plump and juicy. Hee hee hee…”

    日本語訳: 「前回食べたのはそんなに悪くなかったわ。そして、今捕まえたその2人の兵士はふっくらしてジューシーに見えるわ。へへへ…」

    文法解析: このセリフは、過去の経験に対する評価と、現在の状況に対する期待感を示しています。「weren’t so bad」は過去のものを穏やかに否定しており、「look plump and juicy」は現在のものを肯定的に評価しています。

    他の表現との違い:

    オリジナルの表現似た表現使い方の違い例文
    plump and juicyfat and succulent“plump and juicy”は食材が魅力的に見えることを表すのに用いられる。”fat and succulent”も似た意味だが、よりカジュアルに使われる。“The steak was fat and succulent.”

    英語学習者として覚えておくべきポイント: 「plump and juicy」という表現は、食事に関して豊かな味わいや質の良さを示す際に用います。食材に対する見た目の魅力を表現するのに適したフレーズです。

    解説: ビジネスの場では、「plump and juicy」のような表現は直接的には使われませんが、製品やサービスの魅力を表すためのメタファーとして用いることができます。クリエイティブな比喩は、プレゼンテーションやマーケティングの文脈で製品の魅力を伝える際に効果的です。

  • 不満足な表現をコミカルに–英語でユーモアを伝える方法

    不満足な表現をコミカルに–英語でユーモアを伝える方法

    この記事を読んで学べること:

    • 英語における不満や不快感の表現方法
    • イディオムやスラングの理解と使用
    • ユーモアを交えた英語会話の楽しみ方

    今回の表現: “Ugh, it’s almost time for my shift. I hate pretending to be human! They’re so smelly and repulsive. It’s demeaning! burp

    日本語訳: 「ううっ、もうすぐシフトの時間だ。人間のふりをするのは嫌だ!彼らは臭くて反吐が出る。それは屈辱的だ! げっぷ

    文法解析: このセリフは、不満の感情を表す異なる表現が織り交ぜられています。「Ugh」は嫌悪感を示すために使われ、「It’s demeaning」は自尊心を傷つける状況を指しています。

    他の表現との違い:

    オリジナルの表現似た表現使い方の違い例文
    smelly and repulsivestinky and disgusting“smelly and repulsive”はやや穏やかな表現。”stinky and disgusting”はより強い嫌悪感を示す。“The garbage was stinky and disgusting.”

    英語学習者として覚えておくべきポイント: 「Ugh」や「It’s demeaning」といった表現は、英語の日常会話において感情を率直に表す際に使われます。これらは特にユーモアのセンスを加えたいときや、強い不満を表現したいときに有効です。

    解説: ビジネス環境では、不快感を表現する際には言葉選びが重要です。「It’s demeaning」という表現は、自分のプロフェッショナリズムを保ちながら、特定の状況や行為が自己尊重に反すると感じていることを伝えるのに適しています。ただし、直接的な表現は避け、状況を改善するための建設的な提案をすることが望まれます。

  • 賑やかな宴–楽しいひと時を英語で表現する

    賑やかな宴–楽しいひと時を英語で表現する

    この記事を読んで学べること:

    • 歓迎と楽観を示す英語表現の使い方
    • イディオムとフレーズの適切な利用
    • 英会話におけるポジティブな表現の効果

    今回の表現: “Don’t be in such a hurry to leave! Please, take the time to enjoy yourselves with us. Mwa ha ha ha!”

    日本語訳: 「そんなに急いで出て行かないで!私たちと一緒に楽しむ時間を持ってください。ムワハハハ!」

    文法解析: このフレーズは、急ぐことへの軽い忠告と、一緒に時間を楽しむように促す招待の文から成り立っています。「Don’t be in such a hurry」は否定の命令形で、ゆっくりするように勧めています。

    他の表現との違い:

    オリジナルの表現似た表現使い方の違い例文
    take the time to enjoyrelax and have fun“take the time to enjoy”は時間を意識して楽しむことを強調する。”relax and have fun”はよりカジュアルな楽しむことを示す。“Just relax and have fun at the party.”

    英語学習者として覚えておくべきポイント: 「take the time to enjoy」は、急がずに現在の瞬間を楽しむことの重要性を示す表現です。これは、ビジネスや日常会話で、相手にリラックスしてもらいたいときや、ある活動をゆっくりと楽しんでもらいたいときに有効です。

    解説: ビジネス環境においても、「take the time to enjoy」は重要な概念です。クライアントや同僚に対してこのフレーズを使うことで、プレッシャーを取り除き、ゆったりとした雰囲気を作り出すことができます。また、「Mwa ha ha ha」という表現は、楽しく明るい雰囲気を示す際に効果的ですが、フォーマルなビジネスシーンでは避けた方が良いでしょう。