2024年3月7日木曜日

Azure Devops にソースコードを push する方法

Azure Devops にソースコードを push する方法

概要

Azure Devops を使ってみました
まずはプロジェクトを作成しコードを push するところまでやってみました

環境

  • Azure Devops (2024/03/07 時点)

事前準備

事前に Azure Devops の申込みとテスト用のプロジェクトの作成を行っておきましょう
基本は無料で範囲内で使用できるはずです

push してみる

まずは左メニューの「Repos」を選択します
Azure Devops の場合デフォルト画面はダッシュボードで Github の用にソースコードの管理画面ではないようです

Repos を選択するとリモートリポジトリ用の URL が表示されるので既存のリポジトリに設定を追加します
user01 の部分は適宜変更してください
また origin はすでに登録されているので azure というリモート名で登録します

  • git remote add azure https://user01@dev.azure.com/user01/test/_git/test

あとは azure に対して push するだけです

  • git push -u azure master

認証情報は

Azure のコンパネにログインするパスワードではないようです
個人用アクセストークン (PAT) を使って認証します

まずは右上の設定マークから「Personal access tokens」にアクセスします

すると新規トークン作成画面になるので「New Token」を選択します

トークンに名前を設定します
またトークンのアクセス範囲と期限を設定します
今回はフルアクセスで30日にしていますが好きなように変更してください
期限はカスタムでもっと伸ばすこともできます

作成されるとトークンが表示されるので必ずコピーしておきます
ここで画面を消してしまうともう二度と同じトークンを表示できません (再作成になります

作成が完了すると以下のようにトークンの一覧が表示されます
トークン作成後でも期限やスコープを編集することができます

改めて push してみる

作成したトークンを使って改めて push してみましょう
問題なく push できることが確認できると思います
今度は Repos を確認するとちゃんとソースコードの一覧が確認できます

またトークンが作成されるとメールに通知も届きます

最後に

Azure Devops に既存の git リポジトリを push してみました
認証が独自のトークンなのでそこだけ事前に作成しておく必要があります

次回は Pull Requests を作成してみます

2024年3月6日水曜日

nifcloud python sdk でプロキシを設定する方法

nifcloud python sdk でプロキシを設定する方法

概要

前回 botocore でプロキシを設定する方法を紹介しました
今回は nifcloud でプロキシを設定する方法を紹介します

環境

  • Python 3.11.3
  • nifcloud 1.10.0

サンプルコード

from botocore.config import Config
from nifcloud import session


class TestClient:

    def __init__(self):
        proxies = {
            "http": "http://192.168.100.1:3128",
            "https": "http://192.168.100.1:3128",
        }
        config = Config(proxies=proxies)
        self.client = session.get_session().create_client(
            "computing",
            region_name="jp-east-1",
            nifcloud_access_key_id="xxx",  # type: ignore
            nifcloud_secret_access_key="xxx",  # type: ignore
            config=config,
        )

    def describe_instances(self):
        return self.client.describe_instances()


if __name__ == "__main__":
    cli = TestClient()
    print(cli.describe_instances())

最後に

Config でプロキシを設定するだけです

2024年3月5日火曜日

Github の dependabot がプルリクエストを作成してくれないときに確認する項目

Github の dependabot がプルリクエストを作成してくれないときに確認する項目

概要

セキュリティアラートは作成してくれるがプルリクエストは作成してくれない場合の対象方法を紹介します

環境

  • Github (2024/02/29 時点)

対処方法

リポジトリ -> Settings -> Code security and analysis -> Dependabot security updates

を Enable にしましょう

最後に

すでに既存アラートがある場合に有効にしても既存のアラートに対しては作成してくれないので次のセキュリティアラートを待ちましょうするとすぐにプルリクエストを作成してくれるようです

参考サイト

2024年3月4日月曜日

RaspberryPi5 セットアップメモ (無線キーボード)

RaspberryPi5 セットアップメモ (無線キーボード)

概要

有線キーボードがない状態で RaspberryPi5 のセットアップをしてみました

環境

  • Raspbian
  • macOS 11.7.10
  • RaspberryPi Imager 1.8.5

道具

  • RaspberryPI5 8GBRAM
  • micro HDMI ケーブル
  • micro SD カード (32GB)
  • 無線マウス (ドングル付き
  • 無線キーボード
  • 5V3Aアダプタ (本当は5V5Aが理想です

接続

各種ケーブルやマウスなどを接続します

イメージを書き込む際の注意事項

RaspberryPi Imager で OS イメージを書き込む際に必ず SSH を有効にしましょう
また Wifi も起動時に接続するようにしましょう

こうすることで有線キーボードがなくても一旦 SSH で別のマシンからログインすることで無線を設定しその後デスクトップで作業できるようになります

と思ったのですがデスクトップ版の場合初回起動でいきなりログインした状態で起動するのでマウスさえ動けばあとは画面上部のツールバーにある Bluetooth アイコンからキーボードの接続ができるので SSH は不要です

無線キーボードを接続する

Bluetooth で接続します
ドングルはなく直接 RaspberryPi5 と接続します
デスクトップであればツールバーから設定しましょう
キーボードはペアリング状態にしましょう

SSH ではログイン後 bluetoothctl コマンドを使って接続します

capslock -> ctrl

xkb_symbols "basic" のセクションの一番下に以下を追記します
/etc/default/keyboard ではないので注意です

  • sudo vi /usr/share/X11/xkb/symbols/us
key <CAPS> { [ Control_L ] };
modifier_map Control { <CAPS> };

piapps

  • wget -qO- https://raw.githubusercontent.com/Botspot/pi-apps/master/install | bash

Minecraft などは pi-apps 経由のほうが簡単にインストールできます
「Minecraft Java Edition GDLauncher」というのをインストールしましょう

最後に

デスクトップ版の場合はキーボードマッピングを設定するファイルが少し面倒なので注意しましょう

2024年3月1日金曜日

docker でローカルマシンの bash_history をマウントしてコマンド履歴の reverse search をする方法

docker でローカルマシンの bash_history をマウントしてコマンド履歴の reverse search をする方法

概要

新規でコンテナを立てるといつもコマンドの履歴がクリアされてしまうのでホスト側の .bash_history をマウントしてコンテナ上で使用できるようにします

環境

  • Ubuntu 22.04.3
  • docker 25.0.2

コマンド例

bash の場合は以下のようにします

  • docker run --rm -it -v ~/.bash_history:/root/.bash_history python:3.11.3-buster /bin/bash

コンテナ上で実行したコマンドはコンテナ終了後にホスト側の .bash_history を確認するとちゃんと履歴に残っていることが確認できます

最後に

ホスト側で zsh を使っている場合やコンテナ側で zsh を使っている場合はマウントするファイルが変わるので注意しましょう

参考サイト

2024年2月29日木曜日

linkchecker でサイトのリンク切れをチェックする

linkchecker でサイトのリンク切れをチェックする

概要

サイトの URL を指定して自動でリンク切れがないかチェックしてくれます
簡単な使い方を紹介します

環境

  • macOS 11.7.10
  • docker 24.0.2
  • linkchecker 10.4.0

使い方

docker で一発です
サイトの URL を指定します
実行する環境から到達できるサイトであればローカルやプライベートネットワーク内でも可能です

  • docker run --rm -it -u $(id -u):$(id -g) ghcr.io/linkchecker/linkchecker:latest --verbose https://hawksnowlog.blogspot.com/

以下のようにすればまだ公開していないサイトなどファイルを直接チェックすることもできます

  • docker run --rm -it -u $(id -u):$(id -g) -v "$PWD":/mnt ghcr.io/linkchecker/linkchecker:latest --verbose index.html

最後に

サイトのリンク切れをチェックするツールを紹介しました
--ignore-url などを使えば特定の URL はチェックしないなどもできます

サイトのすべてのリンクをチェックするのでページ内にリンクが大量にある場合などは時間がかかるほか実行しているマシンの負荷も結構かかるので注意しましょう

参考サイト

2024年2月28日水曜日

pytest でテストする順番を制御する方法

pytest でテストする順番を制御する方法

概要

pytest-order というライブラリを使って実現します
pytest は基本的には上から実行されます
ファイルが別の場合は名前順に実行されます
またテストに親クラスが設定されている場合は親クラスから順番に実行されます

例えば親クラスにあるテストを後からテストしたい場合には pytest.mark.order というデコレータを使います

環境

  • macOS 11.7.10
  • Python 3.11.6
  • pytest 8.0.2
  • pytest-order 1.2.0

pytest-order なしの場合

  • vim test.py
import pytest


# Testxxx だと2度実行されてしまうので xxxTest という名前にする
class BaseTest:
    def test_two(self):
        print("two")
        assert 2 == 2

    def test_three(self):
        print("three")
        assert 3 == 3


class TestNumer(BaseTest):
    def test_one(self):
        print("one")
        assert 1 == 1
two
three
one

pytest-order ありの場合

import pytest


# Testxxx だと2度実行されてしまうので xxxTest という名前にする
class BaseTest:
    @pytest.mark.order(2)
    def test_two(self):
        print("two")
        assert 2 == 2

    @pytest.mark.order(3)
    def test_three(self):
        print("three")
        assert 3 == 3


class TestNumer(BaseTest):
    @pytest.mark.order(1)
    def test_one(self):
        print("one")
        assert 1 == 1
one
two
three

最後に

順番を制御したい場合には便利です
ただ 1 -> 2 -> 3 という order で 2 と 3 の間に入れたい場合は番号を一つずつインクリメントする必要があるので大変です
そんな場合には整数以外の order も設定できるので 1 -> 2 -> before 3 -> 3 という感じで設定することもできます

import pytest


# Testxxx だと2度実行されてしまうので xxxTest という名前にする
class BaseTest:
    @pytest.mark.order(2)
    def test_two(self):
        print("two")
        assert 2 == 2

    @pytest.mark.order(3)
    def test_three(self):
        print("three")
        assert 3 == 3

    @pytest.mark.order(before="test_three")
    def test_two_point_five(self):
        print("two_point_five")
        assert 2.5 == 2.5


class TestNumer(BaseTest):
    @pytest.mark.order(1)
    def test_one(self):
        print("one")
        assert 1 == 1
one
two
two_point_five
three

もしくは事前に整数を飛ばして間にテストが入っても良いようにしておきましょう