色々書く予定

精神的に向上心がないので、馬鹿

Windows10→Windows11へのアップデート前にハマった話

この記事は 六間坂上 Advent Calendar 2024 12日目の記事です。

オールジャンルであることをいいことに好き勝手書きます。

 

Windows10のサポート期限は2025/10/14までだそうです。MicroSoftの嘘つき。

learn.microsoft.com

何故かWindows10のサポートも切れるし(Win10が最後のWindowsって聞いてたのにな)、時期的にそろそろアップデートしておきたいな~と思い、Windows11へのアップデートをしようと考えていました。

しかし、Cドライブの空き容量が一桁GBになっている。日頃からダウンロードフォルダにファイルを溜め込む悪癖もあり、Cドライブの容量はいつもギリギリで生きています。

四年前から使っているCドライブ用SSDは容量が512GBで心もとない。時は12月頭、ブラックフライデーセールも行われ時期も良い。

思い立ったが吉日(思い立って購入した12/1は本当に大安でした。)、ついでにSSDの換装もしてしまおう。増設用に4TBのSSDを買いました。

執筆時点でAmazonに在庫なしのためリンク未掲載ですが、Western DigitalのSN850X(4TB)です。

 

計画はこうです。

バックアップも兼ねてCドライブの内容をまるまる新しいSSDにクローン

クローンしたSSDWindowsをアップデートし、Windows11へ!

 

しかし、現実はもっともっと複雑な手順を踏むことになるのでした……

 

セキュアブートをサポートしている必要があります。有効にしなきゃ。

ひとまずWindows10からwindows11へのアップデートを行えるのか確認する為に、クローン前にPC正常性チェックツールを入れました。今回の作業前に他PCをWindows11に上げる作業を数回行っていたため、この辺りの流れはお手のものです。

早速チェックすると「PCはセキュアブートをサポートしている必要があります。」の警告が。

 

マザボASUSのB550-PLUSだったので、公式ドキュメントを確認してセキュアブートを有効にします。

www.asus.com

しかし、手順を踏んでもPC正常性チェックツールは「PCはセキュアブートをサポートしている必要があります。」の警告文のまま。ここでハマると思っていませんでした。

 

BIOSモード」にピンときたら110番(大嘘)

結論、BIOSモードが「レガシ」だとセキュアブートを有効にできないそうです。マジか……

今回アップデートしようとしていたPCはまるでテセウスの船のようにツギハギしている自作PCのため(多分もう電源とメインSSDくらいしか残ってるパーツないけど)、BIOSモードが「レガシ」のままでした。

BIOSモードを「UEFI」に変更しなければセキュアブートをオンにできない。しかしBIOSモードを変更する作業は多少リスクがあるようです。

(Windowsが標準で用意してくれているMBR2GPTがあるとはいえ)

learn.microsoft.com

 

そのため、作業工程がこのように変わりました。

PCをクローン

BIOSモード変更←new!

SSDWindowsをアップデート

 

ようやくClonezillaにてクローン着手

SSDのクローンについてはこちらの記事が詳しく、とても参考にさせていただきました。クローンはとても順調で、以下の記事をなぞることになってしまうので書くことがないです。

osa030.hatenablog.com

 

とても参考になる記事で、クローンするだけでは駄目でパーティション拡張をしないと4TBが有効に使えない事を知ることが出来ました。ありがとうございます。

 

現在の作業工程(やっと最終版です)

PCをクローン

パーティション拡張←new!

BIOSモード変更

SSDWindowsをアップデート

 

パーティション拡張でまたハマる

しかし、パーティション拡張のソフトを同様に起動した際に何度起動しようとしても起動前にフリーズしてしまいます。これは困った。

osa030.hatenablog.com

 

色々調べてみた結果、驚きの事実が判明。

 

GPartedはセキュアブートが無効でないと起動しません。

こちとらセキュアブートを有効にするために様々設定をして試行錯誤していたので、大きな落とし穴でした。

 

www.long-life-tour.com

Gpartedを起動するには、Secure bootをOFFにして、CSMをONにする必要があります。

 

一度BIOSからセキュアブートをオフ、CSMをオンにし、再度起動。

GPartedが動き、無事4TBのSSDを用意出来ました。あとはBIOSモードの変更だけです。

 

MBR2GPTを用意してくれてありがとうMicroSoft。飴と鞭の使い分けがDV彼氏みたいだな。

MBR2GPTでのBIOSモード変更は以下の記事が参考になりました。

この記事ほど苦戦しませんでしたが、参考になった記事を貼らせていただきます。

note.com

 

特に詰まらず、一発で変更に成功しました。バックアップがあると心の余裕があってとても良いです。

 

完了です、お疲れさまでした。

 

誰でも「読みやすい」コードとは?

この記事は 六間坂上 Advent Calendar 2024 3日目の記事です。

 

はじめに

はじめまして。たーとると申します。

むかしむかし、DSでうごメモにハマっていたこともありHatena Blogを根城に選びました。

人生で初めて記事を書くため、不備がありましたら大目に見てください。

技術者もすなるAdvent Calenderといふものを、私もしてみむとてするなり

 

全くの別業種から転職を行い、(大学で少し触った程度の)未経験からSEもどきになって早4年ほどです。

1年目はとても丁寧にプログラミングの基礎を教えてもらいました。今でも先輩方には頭が上がりません。

それでも、最初に業務のコードを見たときは「どこから読んでいいのか、自分が実現したいことを達成するためにどう書くべきか」が全く見当もつきませんでした。勿論今でも悩むことはありますが。

そこで、初学者の頃を思い出して読みやすいコードについて簡単な考察をしてみたいと思います。プログラム初心者でも読みやすいコードってなんだろう?

読みやすいコードとは

例えばこんなコードがあったとします。

(業務で書くコードはC#が多いため、サンプルもC#で)

  1. List<int> nums = new List<int>() { 1, 2, 3, 4, 5 };
  2. int total = 0;
  3. foreach (var num in nums)
  4. {
  5.     total = total + num; // なんなら total += num; って書きたいけど
  6. }
  7. Console.WriteLine("合計" + total + "です。");

 

恐らく入社したての僕でも一文ずつを追えば読める、簡単なコードです。意図が明確ですし、プログラミング初学者でも読み書き可能な易しいコードと言えるでしょう。

でもC#にはもっといい書き方、ありますよね。こう書くと思います。

  1. List<int> nums = new List<int>() { 1, 2, 3, 4, 5 };
  2. Console.WriteLine("合計" + nums.Sum() + "です。");

 

これは、読みやすいコードと言えるでしょうか。

「Sumは合算だ」という知識さえあればとても読みやすいと言えると思います。

何なら今の僕であればこう書かれているのが自然に感じます。というかこうあるべきです。

 

当時の僕はLinqもプログラムで用いられる基礎的な英語や単語も知らない若造だったので、Linqが何行にもわたっていると「なんか繋がってる~」となりいちいち調べることで何とか読み解いていた覚えがあります。GroupByの概念を理解するのに一週間くらいかかったような。

 

それでは、処理について日本語でメモを残せば良いでしょうか。

  1. List<int> nums = new List<int>() { 1, 2, 3, 4, 5 };
  2.  
  3. // numsの合算値を出力
  4. Console.WriteLine("合計" + nums.Sum() + "です。");

 

……同じことが二回書いてある

と読めてしまいます。基礎的な知識が付いたからこそそのように読めるのですが、もし業務コードにこのようなコメントがそこかしこにあったら発狂してしまいます。

コメントは可能な限り削ぎ落とし、一見して何をしているか分からないコードにそっと添えるくらいが乙なものです。

 

日本語で説明させてみた

では、プログラマなら読めるコードをAIで説明させたら、初学者でもそれなりに分かりやすい説明が出力されるのでは?

思いついたが吉日、試してみましょう……

Microsoft Copilot より

 

おお、これならプログラムを触ったことのない文系大学生でもかなり理解しやすそうです。部分的に理解できない場合はまあまあ使えるのではないでしょうか。

 

…………と言いたいところですが、実際の業務のコードってこんなに分かりやすいことはないと思います。独特なクラスやプロパティがあることは日常茶飯事ですし、クラスやメソッドを他コードから継承していた場合、コピペ範囲が膨大になる事は容易に想像ができます。

 

使用するのが初学者の場合AIが正しい回答を返しているか自分で検証しようがないというのも問題です。

コードが沢山ある中でどこを読ませればいいのか何も分からなくてここだけを読ませてしまった人がいたとします。

で、そのメソッドの中で何やってるんだよ!!のパターン

プログラムの追い方をある程度分かってきた今なら、コードを抽象化してAIに読んでもらう選択肢もありですが、初学者の頃にそれができるとは思えず……

 

また、Chat系のAIを使う時はセキュリティポリシーを確認する必要がありますし、データを食わせる先を選ばなきゃいけないのはネックです。

情報漏洩のリスクを完全に排除できない以上、業務のコードをそのままコピペするのは個人的にはしたくないので、食わせても問題のない形に成形する手間がある……

(というか成形できるのなら、そのプログラムの根幹を理解しているのでは??)

そこまでするならその時間で「検索力」を高めて読めるように訓練することが真のプログラマー(ぢから)なのではないでしょうか……違うかも……

 

まとめ?

・プロジェクトメンバーの認識を合わせて、言語特性に合わせた読みやすいコードを意識して書く。

・ちゃんと書かれているコードで読めない物は読む側が知識を付ける。

・読めないコード、読みにくいコードを書かない。

・ネットに転がっているようなオープンソースのコードの意図が読み取れないときは、AIに突っ込んでみてもいいかもね。

 

当たり前で抽象的な事しか書いてないな……

 

Linqであれ三項演算子であれ、書き方のルールのようなものなので、初見で完全に理解するのは不可能です。C#も年々進化しもう13.0です。

learn.microsoft.com

新しい文法や記法・組み込み型が出てくることも珍しくなく、常にこちらの知識をアップデートしていかなければいけない事は自明です。

初学者の方はめげずに初めて見る型やメソッドを検索しましょう。分からない事は分かる人にどんどん聞きましょう。みんなそうして知識を付けてきました。

 

そうして人に教える側に回り、後輩に基礎的な事象を一通り説明できるようになった時、プログラマーとしてのスタートラインに立てるのではないでしょうか。知らんけど。

 

 

 

……僕ですか?

僕は何年経っても後輩が入ってこないのでよくわからないですね……大丈夫かな