Gobble up pudding

プログラミングの記事がメインのブログです。

MENU

機種変したらSIMが無効になって繋がらなくなった

教訓

悪いことはいわないからデータ移行の時は旧機種からSIMカードを抜いておけ!

起こったこと

iPhone 13 ProからiPhone 16 Proにデータ移行したら、繋がらなくなった。
iPhone 13 ProのほうにSIMカード刺したままクイックスタートでデータ移行したら思いがけず物理SIMがeSIMに変わってしまった。
そして、物理SIMカードを差し替えてiPhone 16 Proを見ると、SIMがダブっていたので、
なにこのeSIM?と思い消したら、圏外になってオワッタ。

解決方法

  1. eSIMでいいやにしちゃって、物理SIMカードは返却する
  2. やっぱりいやだから物理SIMに戻す(お金取られる)

    eSIMに変わったのに気づかなかったそこのあなた、eSIM消しちゃいましたか?
    eSIM再発行で治るケースもある(と思われる)ので、再発行しましょう(ワイモバイルはオンラインなら無料。店頭なら有料)
    私の場合、eSIM再発行でも圏外のまま、インターネットにつなげませんでしたのでショップ行きとなりました。

やってしまった流れ

iPhone 16 Proを買ったので、クイックスタートでデータ移行しました。 iPhone 13 ProからiPhone 16 Proへ
元の構成は
物理SIM(主回線): Y!mobile(ワイモバイル)
eSIM(副回線): povo(ポヴォ)
という構成でした。

クイックスタートってどうやるんだっけな?とサイトを軽く見たら、
ふむふむ、物理SIMを付け替えるタイミングはデータ移行でもいいのだな
と、そのままやりました。
※トラブルを防ぐなら最初の段階で物理SIMを新機種のほうに移動させたほうがよさそうです。

移行しようとすると、
SIMを移行しますか?のようなのが出てきて
主回線と副回線のSIMが出てきました。
一つしか選択できないのでとりあえず主回線を移行するかということでポチっと。
これが悲劇の始まりでした。
いやいや、物理SIMなのになんで選択肢がここで出てくるの?と疑問に思わずに。

その後、データ移行が終わると、新機種のほうに物理SIMカードを刺して突っ込んで設定を見ると、
あれ?主回線の電話番号が2つあるな。
しかも一個はeSIMとして設定されている。
この時点でおかしいことに気づけばよかったのですが、ながら作業でやってた関係で、さらなる悲劇を生みます。

なんじゃこりゃ消しちゃえ。
eSIM削除

あれ???主回線(ワイモバイル)側からインターネットにつなげない。
設定アプリの一般>情報のSIM欄をみると
ネットワーク: 使用できません
となっている
エッ(゚Д゚≡゚Д゚)マジ?

腑に落ちないのでググる。
https://www.ymobile.jp/info/press/2023/23091901.html
https://esim.love/blog/2023/10/06/1161/
どうもクイック転送で「物理SIMからeSIMに変換できるようになりました!」 とのこと!余計な事すんなや!!
こんな確認画面出てきたか?ながら作業でやってたので気づかなかった。
なんかワイモバイルの暗証番号?みたいなのは聞かれて入れた記憶はあるものの。
※クイックスタートとクイック転送は別物と思われるが、無関係ではなさそう。


クイック転送で移行する場合は無料らしい。そうでない場合は3,850円かかるらしい。
なお、eSIMから物理SIMに戻す場合はショップに出向き3,850円を払う必要があるとのこと。
おいおい。
ちなみにeSIMを誤って消してしまった場合、オンラインなら無料とのこと(ただしeKCYが必要)。
うーん、めんどくさいし、金かけたくないからeSIMで運用してみるか。
よし、再発行!!
「サービスの受付は、午前4時~午後11時15分までとなっております」 あっ、ハイ、そうですか。
目がバキバキになりながら4時まで待機しました(-_-;)。
だって、なにかと新たに使おうとすると電話番号に確認番号の認証が...。
しかしSIMが有効でないので確認番号が確認できない。
... で結局11時に届いたんだけど、
アクティベーションができない。
うーん詰んだ。
ということでワイモバイルショップへ
結局物理SIMに戻して3,850円払って解決。 eSIMでもよかったんだけれどもとりあえず物理SIMで困ってないので物理SIMに。
盗難とかされても安心なのはeSIMだけれども。
ワイモバイルのeSIM再発行ができるページを見たら
ただのSIM再発行に代わっていた。
なぜeSIM再発行でもダメなのかは理由を聞いていないので、原因はわからなかったが、 解決したのでよしとしよう。
わかったことは少なくとも移行されてしまった物理SIMは無効になる。
しかし、移行時に無料ではあるものの契約内容の確認が出なかったはず?(これは正直自信がない)、
なので結構な罠な気がする。
ちなみに無効になった物理SIMに加えて、新しい物理SIMが増えた。
で一応、無効になった物理SIMは返却したほうがいいかと聞くと、捨ててくれと言われた。
公式見解かはよくわからないが、指示通り捨てることにした。

困ったこと

デュアルSIMなので、別に片方インターネットがダメになってもいいのだけれども、
特にLINEとかはこの段階でつまづくと、最初の移行後にログインで電話番号にワンタイムのパスワードが送られてくるが、
主の電話番号が死んでいるので、どうにもできない。
というのが地味に困った問題であった。
こういうのを考えると、回線の冗長化ではなく、スマホの冗長化を考えたほうがよさそう。

iPhoneでDual SIMを使ってみたら圏外になった

使用環境

iPhone 13 Pro (SIMフリー端末) iOS 17
Y!mobile(物理SIM) + povo2.0(eSIM)

長いのでまとめ

ワイモバイルとpovo2.0のデュアルSIM環境で
iPhoneがAPN構成プロファイルを1つしか入れられない仕様により、回線を切り替えたら圏外になったが
APNが複数入っているのが原因だった。
iOS 15以上ならAPN構成プロファイル不要で、Y!mobile、povo2.0ともにそのまま使える。
※ここ3年くらいに買った機種なら不要なはず。他のキャリアも多分そうだが未検証。

どうしたらいい?

同じ現象で困った人はとりあえず
iOS 15以上でAPN構成プロファイル消せば復活するよ。

povo2.0契約しました(事の始まり)

使用期間2年のiPhone 13 Proでギガが足りなくなってきたので、
ちょこっと調べるとDual SIM対応してるんだ!と今更気づいたので、
povo2.0を契約
入力がフリック入力だとだるいのでPCで契約してたから途中でスマホで設定して、…と少し面倒でした。
さくっとインストールを終えて、手順に従いpovoのAPN 構成プロファイルを入れて...
と、ここが悪夢の始まりだった。

切り替えると圏外になった

快適にしばらくpovo2.0に切替えてギガ回避をしていて、ふと
主回線のワイモバイルのSMSが届かないことに気づいた。
あれー?と思い、povoから主回線Y!mobileに切り替えるも、SMSが届かない。
それどころかモバイルデータ通信でインターネットに繋がらない。

うーん。povo消してみるか、ってことでAPN構成プロファイルを削除
povoのeSIMも消してワイモバイルのプロファイルをWi-Fiで繋いでDLしてインストール*1
繋がらない\(^o^)/

再起動するか
繋がった。SMSも届いた。

と、2時間程度消耗しました。

原因

調べると、iPhoneの仕様で
プロファイルが2つ同時にインストールできないとのこと。
この辺に情報があった。
iPhoneでデュアルSIMする時の問題点〜構成プロファイル | mineo情報館
iPhoneデュアルSIMで格安SIMを使う際の注意点。APN構成プロファイルをインストールで繋がらなくなる問題。 | ビジネス幼稚園 【デュアルSIM(複数SIM)】iPhone の注意点!APN構成プロファイル は2つ使えない!? | ふうカフェ mobile

しかもプロファイルをインストールした時の回線にAPNが紐づくらしい。
インストールしなおして何とかなった。

はー、なんなんだよ、これじゃあデュアルの意味ねージャン。 どうすんのー?3大キャリアのだと最初からAPNの情報をSIMが持っていてそれならいけるって話もあるが。。。
と思っていました。
さらに調査すると新しい事実が判明した。

そもそもAPN設定はiOS 15以上ならいらない

ところが、全く同じ構成で使っている友人はモバイルデータ通信の切り替えで問題が発生していないという。
構成プロファイルを見せてもらうと何も入っていない…だと?
気になって調べてみた。
このiPhoneは3年ほど使っていて、MVNOのとかはAPNをいれるのを前提としていたが、
(というより、データコピーしてiPhone引き継いでるのもあってiOS 14以前に入れたものだろう)
そもそも、キャリアが対応していればだが、iOS 15あたりからAPNなしで通信できる。

ワイモバイル - きまぐれ手記 Kimagurenote

ワイモバイルとpovoは別途調べるとiOSが新しければAPN構成プロファイルがいらないとのこと。

ワイモバイル
ワイモバイル回線の通信設定をする|SIMフリー iPhone/iPad|ワイモバイルスマホの初期設定方法|Y!mobile - 格安SIM・スマホはワイモバイルで
明示的に書いてないがAPN構成プロファイルは新しめの機種なら入れるようには書いてない。

povo2.0
APN設定は必要ですか? – povoサポート
iOS 15以上ならいらないと書いている。

実際にやってみる

また圏外いやだよーと思いつつ、プロファイルを消してみる。
別にいらないSoftbank一括設定というのもあるが、それは残す。
この状態でワイモバイルで繋いでみる→繋がった。
eSIMを復活させて…と思ったら再発行が必要なのか…時間外じゃん。
「データ専用」プランの場合、eSIMの再発行はできません。 ┌(┌՞ਊ՞)┐キェァァァェェェェァァァwww
その後、お盆の旅行で、povoをAPN構成プロファイルなしで使ってみたら何の問題もなくDual SIMができました。

*1:eSIMを消すとデータ専用プランだと取り返しがつかないのでやらないでください

MyBatis Generatorを使ってコードの自動生成をしてみる


皆さんJavaでORMは何を使っているでしょうか?だいたいJPA(Hibernate)かMyBatisだと思いますが、
Hibernateはやりたいことに対して複雑すぎるのがあって敬遠していると思います。
そこでMyBatisなのですが、何かと書くの面倒、楽したいってのはあると思います。
そこで検討してみるのがMyBatis Generatorではないでしょうか。というので、導入方法の紹介です。
今回やってみたのはアノテーションでの自動生成方法です。
XMLでの生成も簡単に設定で変えられます。

前提条件

コマンドラインで使えるMavenが入っていること
Eclipse Pleiades のJava Full Editionを入れとく

Pleiadesは昔重すぎて、余計なのがたくさんついてる印象であまり好きでなかったですが、
久々に使ってみるとよいです。いまだと必要なものだけが入っていていい感じ!
プラグインの相性が悪い変なハマりも少なくていいかも。

英語化したい場合は
[eclipseのインストールフォルダ]\eclipse\eclipse.iniファイルを変更
-javaagent:dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jarの行を削除
最後の行に-Duser.language=en_USを追加
これでEclipseを再起動する

MarketplaceからMyBatisGeneratorを入れる

MarketplaceからMyBatis Generator 1.4.2をEclispeに入れる。

PostgreSQLをインストール

普通にインストールする。
Macの場合はここ参照

適当なデータを用意する

https://www.postgresqltutorial.com/postgresql-getting-started/postgresql-sample-database/

Spring Boot Projectを作成する

Name: demo-mybatis-generator
Type: Maven
Packaging: Jar
Java Version: 17
Language: Java

Lombok, Spring Boot DevTools, Spring Web がデフォルトで選ばれていると思うけど、
これに加えて
MyBatis Framework, PostgreSQL Driver, Thymeleaf を追加で入れる。

設定ファイルを整備する

src/man/resources/application.properties に以下を追記

spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/dvdrental
spring.datasource.username=postgres
spring.datasource.password=postgres

※用意したデータの場合です。

pom.xmlの編集

https://mybatis.org/generator/running/runningWithMaven.html
を参考に
pom.xmlに次を追記する。

    <build>
        <plugins>
            <plugin>
                ...(関係ないので省略)
            </plugin>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.4.2</version>
                <configuration>
                    <configurationFile>${project.basedir}/src/main/resources/generatorConfig.xml</configurationFile>
                    <overwrite>true</overwrite>
                </configuration>
                <executions>
                    <execution>
                        <id>Generate MyBatis Artifacts</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.postgresql</groupId>
                        <artifactId>postgresql</artifactId>
                        <version>${postgresql.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

※Eclipseから実行する場合はいらないところがいくつかあります。

generatorConfig.xmlの編集

Javaの場合はtargetRuntimeで指定する生成方法で3つの方法があり、大きく次の特徴があります。

MyBatis3DynamicSql MyBatis3 MyBatis3Simple
コード生成量 少なめ 多い 少ない
使うクラス MyBatis Dynamic SQL ~Example 普通のMapper
Annotation/XML Annotation 選択可 選択可

デフォルトはMyBatis3DynamicSqlでタイプセーフでコード生成量も比較的少なく そのままで柔軟なクエリが欠けるといった特徴があります。
しかし、独自DSLみたいな書き方を強制されるので人を選ぶ感じがあります。
自分で書く場合はAnnotationベースで書いちゃうって場合が多いと思います。 その場合、MyBatis3Simpleが多くの場合適してるのではないかと思います。

src/main/resources/generatorConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
 "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>
    <!-- 生成タイプはMyBatis3Simpleを選びます -->
    <context id="postgres" targetRuntime="MyBatis3Simple">
        <!-- 生成コメントの設定 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        
        <!-- DB接続設定 -->
        <jdbcConnection driverClass="org.postgresql.Driver"
            connectionURL="jdbc:postgresql://localhost:5432/dvdrental"
            userId="postgres" password="postgres">
        </jdbcConnection>
        
        <!-- Entityの設定 -->
        <javaModelGenerator
            targetPackage="com.example.demo.entity"
            targetProject="src/main/java">
        </javaModelGenerator>
        
        <!-- Mapper(XML)の設定 -->
        <!--
        <sqlMapGenerator
            targetPackage="com.example.demo.mapper"
            targetProject="src/main/resources">
        </sqlMapGenerator>
        -->
        
        <!-- Mapper(Java)の設定 -->
        <javaClientGenerator type="ANNOTATEDMAPPER"
            targetPackage="com.example.demo.mapper"
            targetProject="src/main/java">
        </javaClientGenerator>
        
        <!-- コードを生成するテーブルを指定 -->
        <table tableName="actor" modelType="flat">
        </table>
    </context>
</generatorConfiguration>

かなり細かい設定ができますので、気になる方は、こちらを参照。
MyBatis Generator Core – MyBatis Generator XML Configuration File Reference

この設定の場合、自分でMapper書きたいなと思えば、簡単に追加することができます。
自動生成したコードを直接触るのはどうなの?とかいうのはあるかと思いますが、
そこはプロジェクト次第だと思います。

コードの自動生成

コマンドプロンプトから

mvn mybatis-generator:generate

この例ではentity配下にActor.java
mapper配下にActorMapper.java
が生成されます。

Homebrew経由でPostgreSQL14をインストール


インストール直後何をすればいいのかよく忘れるのでメモ

前提条件

M1 Mac
シェルはbash
Homebrewをインストール済み
echo $SHELLで/bin/zshならzshです。 もし変えたい場合は先におまけから

インストール

Homebrew経由でPostgreSQL14をインストール

brew install postgresql@14

@の後ろがバージョン番号です。
あとは基本的にTerminalに表示されるまま
デフォルトがzshの場合はこれではなく表示される手順に従ってください。
ログイン時にパスを通す(bash)

(echo; echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') >> ~/.bash_profile

現在のシェルでPATHを通す

eval "$(/opt/homebrew/bin/brew shellenv)"

サービスを起動する

brew services start postgresql@14  

サービスの一覧を確認する

brew services list

データベースの初期化をする

initdb --locale=C -E UTF-8 /opt/homebrew/var/postgresql@14

スーパーユーザ作成

createuser -P -s postgres

繋いでみる

createuser -P -s postgres

繋げたら\qで終了

パスワードを聞かれるようにする

vim /opt/homebrew/var/postgresql\@14/pg_hba.conf 

trustをmd5にする

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
brew services restart postgresql@14

おまけ bashをデフォルトにする方法+αの設定

chsh -s /bin/bash

vim ~/.bash_profile

HOST='\u@\h'
PS1="\[\033]0;$HOST\007\]"     # set window title
PS1="$PS1"'\n'                 # new line
PS1="$PS1"'\[\033[32m\]'       # change color
PS1="$PS1"'\u@\h '             # user@host<space>
PS1="$PS1"'\[\033[33m\]'       # change color
PS1="$PS1"'\w'                 # current working directory
PS1="$PS1"'\[\033[0m\]'        # change color
PS1="$PS1"'\n'                 # new line
PS1="$PS1"'$ '                 # prompt: always $

# "-F":ディレクトリに"/"を表示 / "-G"でディレクトリを色表示
alias ls='ls -FG'
alias ll='ls -alFG'

~/.bashrcでもいい。というか、本当はこっちが正しい。
本当に正しい .bashrc と .bash_profile の使ひ分け #Bash - Qiita